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聊天室实现方法
Jun 28 Python
利用Python批量生成任意尺寸的图片
Aug 29 Python
python中实现k-means聚类算法详解
Nov 11 Python
Python代码实现KNN算法
Dec 20 Python
python+selenium识别验证码并登录的示例代码
Dec 21 Python
python3 发送任意文件邮件的实例
Jan 23 Python
PyCharm代码整体缩进,反向缩进的方法
Jun 25 Python
Python基于递归算法求最小公倍数和最大公约数示例
Jul 27 Python
对python添加模块路径的三种方法总结
Oct 16 Python
wxPython实现分隔窗口
Nov 19 Python
Django框架配置mysql数据库实现过程
Apr 22 Python
python缺失值的解决方法总结
Jun 09 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
php简单提示框alert封装函数
2010/08/08 PHP
正确的PHP匹配UTF-8中文的正则表达式
2015/05/13 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
基于CI(CodeIgniter)框架实现购物车功能的方法
2018/04/09 PHP
Thinkphp5框架ajax接口实现方法分析
2019/08/28 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
jquery实现固定顶部导航效果(仿蘑菇街)
2013/03/21 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
解决jquery插件冲突的问题
2014/01/23 Javascript
HTML,CSS,JavaScript速查表推荐
2014/12/02 Javascript
js分页工具实例
2015/01/28 Javascript
JS实现登录页面记住密码和enter键登录方法推荐
2016/05/10 Javascript
使用重写url机制实现验证码换一张功能
2017/08/01 Javascript
深入浅析javascript继承体系
2017/10/23 Javascript
Vue.js 中的 v-show 指令及用法详解
2018/11/19 Javascript
小程序实现上下切换位置
2020/11/16 Javascript
[07:55]2014DOTA2 TI正赛第三日 VG上演推进荣耀DKEG告别
2014/07/21 DOTA
[01:03:09]完美世界DOTA2联赛PWL S2 Forest vs SZ 第二场 11.25
2020/11/26 DOTA
Python中的高级函数map/reduce使用实例
2015/04/13 Python
python处理csv数据动态显示曲线实例代码
2018/01/23 Python
Python基于百度AI的文字识别的示例
2018/04/21 Python
Python 忽略warning的输出方法
2018/10/18 Python
pytorch之添加BN的实现
2020/01/06 Python
Python打开文件、文件读写操作、with方式、文件常用函数实例分析
2020/01/07 Python
在python中利用dict转json按输入顺序输出内容方式
2020/02/27 Python
HTML5之SVG 2D入门2—图形绘制(基本形状)介绍及使用
2013/01/30 HTML / CSS
匈牙利超级网上商店和优惠:Alza.hu
2019/12/17 全球购物
Skechers越南官方网站:来自美国的运动休闲品牌
2021/02/22 全球购物
GWT (Google Web Toolkit)有哪些主要的原件组成?
2015/06/08 面试题
个人素质的自我评价分享
2013/12/16 职场文书
电子商务专业学生职业生涯规划
2014/03/07 职场文书
yy婚礼主持词
2014/03/14 职场文书
中小学校园安全广播稿
2014/09/29 职场文书
试用期辞职信范文
2015/03/02 职场文书
2015年组织委员工作总结
2015/04/23 职场文书
八年级语文教学反思
2016/03/03 职场文书