flask框架中的cookie和session使用


Posted in Python onJanuary 31, 2021

文章介绍了flask框架中的cookie和session。Session是在服务器端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中。Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。

WEB -> cookie & session

由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session.典型的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的Session,用用于标识这个用户,并且跟踪用户,这样才知道购物车里面有几本书。这个Session是保存在服务端的,有一个唯一标识。

服务端如何识别特定的客户?这个时候Cookie就登场了。每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端。实际上大多数的应用都是用 Cookie 来实现Session跟踪的,第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在 Cookie 里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器,我就知道你是谁了。

Cookie其实还可以用在一些方便用户的场景下,设想你某次登陆过一个网站,下次登录的时候不想再次输入账号了,怎么办?这个信息可以写到Cookie里面,访问网站的时候,网站页面的脚本可以读取这个信息,就自动帮你把用户名给填了,能够方便一下用户。这也是Cookie名称的由来,给用户的一点甜头。

flask中的session和cookie

   flask中的session机制是将敏感数据加密后放入session,然后将session存入cookie,下次请求时,直接从浏览器发过来的cookie中获取session,再从中获取数据进行解密

   这样操作更节省服务开销,因为数据均存储到客户端

   大家可能会担心这种做法的安全性,因为数据全部存储在本地浏览器,很容易被盗取,但是安全性总是相对的,而且flask里面对session也有自己的特殊加密算法,所以也不用太过于在意安全方面的问题

Session操作

1.使用sessiom需要先导入session

from flask import session

2.SECRET_KEY

    一定记得要设置SECRET_KEY,用于加密数据,并且如果每次启动服务器你的秘钥都在变化的话就不能再用之前的SECRET_KEY进行解密了,我们此处就可以将它设置成固定值,对于配置文件里面变量的设置,前文讲过,如果数据量比较多就单独在config.py里面集成,但是如果只是很微量的几条设置,那么就可以在主文件里简单进行指令设置即可,类似这里的:

#生成随机的24位字符串
app.config['SECRET_KEY'] = os.urandom(24)

3.session值添加

因为session和cookie都是键值对形式的字典,所以直接用字典方法添加就可以了

session['username'] = 'user1'

4.session值删除

#1.单条删除
session.pop('username')
del session['username']
#2. 全部清除
session.clear()

5.session值获取

session.get('username')
session['username']

6.设置过期时间(如果不设置,默认浏览器退出即自动结束)

#在config.py中配置session参数PERMANENT_SESSION_LIFETIME,这个值的数据类型是datetime.timedelay类型
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) 
session.permanent = True #默认为31天

在Flask中对cookie的处理

1. 设置cookie:

设置cookie,默认有效期是临时cookie,浏览器关闭就失效
可以通过 max_age 设置有效期, 单位是秒

resp = make_response("success") # 设置响应体
resp.set_cookie("Itcast_1", "python_1", max_age=3600)

2.获取cookie

获取cookie,通过reques.cookies的方式, 返回的是一个字典,可以获取字典里的相应的值

cookie_1 = request.cookies.get("Itcast_1")

3.删除cookie

这里的删除只是让cookie过期,并不是直接删除cookie

删除cookie,通过delete_cookie()的方式, 里面是cookie的名字

resp = make_response("del success") # 设置响应体
resp.delete_cookie("Itcast1")

示例

from flask import Flask, make_response, request
app = Flask(__name__)
@app.route("/set_cookie")
def set_cookie():
  resp = make_response("success")
  '''
    设置cookie,默认有效期是临时cookie,浏览器关闭就失效
    可以通过 max_age 设置有效期, 单位是秒
  '''''
  resp.set_cookie("Itcast_1", "python_1")
  resp.set_cookie("Itcast_2", "python_2")
  resp.set_cookie("Itcast_3", "python_3", max_age=3600)
  return resp
 
@app.route("/get_cookie")
def get_cookie():
  """
    获取cookie,通过reques.cookies的方式,
    返回的是一个字典,可以用get的方式
  """
  cookie_1 = request.cookies.get("Itcast_1") # 获取名字为Itcast_1对应cookie的值
  return cookie_1
 
@app.route("/delete_cookie")
def delete_cookie():
  """
    删除cookie,通过delete_cookie()的方式,
    里面是cookie的名字
    这里的删除只是让cookie过期,并不是直接删除cookie
  """
  resp = make_response("del success")
  resp.delete_cookie("Itcast1")
  return resp
 
if __name__ == '__main__':
  app.run(debug=True)

到此这篇关于flask框架中的cookie和session使用的文章就介绍到这了,更多相关flask cookie和session内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python的else子句使用指南
Feb 27 Python
Python进阶篇之字典操作总结
Nov 16 Python
查看django版本的方法分享
May 14 Python
浅谈Python的条件判断语句if/else语句
Mar 21 Python
OpenCV 模板匹配
Jul 10 Python
浅析pandas 数据结构中的DataFrame
Oct 12 Python
通过python扫描二维码/条形码并打印数据
Nov 14 Python
Python爬虫爬取杭州24时温度并展示操作示例
Mar 27 Python
django 解决扩展自带User表遇到的问题
May 14 Python
基于Python把网站域名解析成ip地址
May 25 Python
如何通过Python实现RabbitMQ延迟队列
Nov 28 Python
安装pytorch时报sslerror错误的解决方案
May 17 Python
Flask处理Web表单的实现方法
Jan 31 #Python
Django中如何用xlwt生成表格的方法步骤
Jan 31 #Python
Django中template for如何使用方法
Jan 31 #Python
python中os.remove()用法及注意事项
Jan 31 #Python
python os.listdir()乱码解决方案
Jan 31 #Python
linux系统下pip升级报错的解决方法
Jan 31 #Python
Linux系统下升级pip的完整步骤
Jan 31 #Python
You might like
CodeIgniter框架过滤HTML危险代码
2014/06/12 PHP
全新Mac配置PHP开发环境教程
2016/02/03 PHP
Symfony实现行为和模板中取得request参数的方法
2016/03/17 PHP
Jquery下判断Id是否存在的代码
2011/01/06 Javascript
最短的javascript:地址栏载入脚本代码
2011/10/13 Javascript
jQuery 瀑布流 浮动布局(一)(延迟AJAX加载图片)
2012/05/23 Javascript
jquery动态添加元素事件失效问题解决方法
2014/05/23 Javascript
一段非常简单的js判断浏览器的内核
2014/08/17 Javascript
JavaScript控制按钮可用或不可用的方法
2015/04/03 Javascript
JavaScript的类型、值和变量小结
2015/07/09 Javascript
基于Css3和JQuery实现打字机效果
2015/08/11 Javascript
jQuery隐藏和显示效果实现
2016/04/06 Javascript
jQuery中的siblings()是什么意思(推荐)
2016/12/29 Javascript
vue与bootstrap实现时间选择器的示例代码
2017/08/26 Javascript
移动端效果之IndexList详解
2017/10/20 Javascript
微信小程序实现图片上传放大预览删除代码
2020/06/28 Javascript
解决Vue使用swiper动态加载数据,动态轮播数据显示白屏的问题
2018/09/27 Javascript
Vue实现移动端页面切换效果【推荐】
2018/11/13 Javascript
详解JS实现系统登录页的登录和验证
2019/04/29 Javascript
教你搭建按需加载的Vue组件库(小结)
2019/07/29 Javascript
javascript实现异形滚动轮播
2019/11/28 Javascript
基于JS判断对象是否是数组
2020/01/10 Javascript
解决echarts中横坐标值显示不全(自动隐藏)问题
2020/07/20 Javascript
使用js获取身份证年龄的示例代码
2020/12/11 Javascript
利用JS判断元素是否为数组的方法示例
2021/01/08 Javascript
python实现的一只从百度开始不断搜索的小爬虫
2013/08/13 Python
Python安装图文教程 Pycharm安装教程
2018/03/27 Python
详解python算法之冒泡排序
2019/03/05 Python
基于python的BP神经网络及异或实现过程解析
2019/09/30 Python
python 读取更新中的log 或其它文本方式
2019/12/24 Python
客服主管岗位职责
2013/12/13 职场文书
大学生水果店创业计划书
2014/01/28 职场文书
护士2014年终工作总结
2014/11/11 职场文书
基于Golang 高并发问题的解决方案
2021/05/08 Golang
浅谈MySQL中的六种日志
2022/03/23 MySQL
Java中的继承、多态以及封装
2022/04/11 Java/Android