Flask session概念解释
session是基于cookie实现的,保存在服务端的键值对,形式为{随机字符串:‘xxxxxx’},同时在浏览器中的cookie中也会保存相同的随机字符串,用来再次请求时验证
注意:Flask中的session是保存在浏览器中的,默认的key是session(加密的cookie),当然也可以将其保存在数据库中
flask中有一个session对象,它允许你在不同请求间存储特定用户的信息。它是在cookie的基础上实现的,并且对cookie进行密钥签名要使用会话,你需要设置一个密钥
同request一样,session基于上下文管理
配置SECRET_KEY
因为flask的session是通过加密后保存在cookie中的,有加密就需要有解密用的密钥,所以只要用到了flask的session模块,就一定要配置’SECRET_KEY’这个全局宏。一般设置为24位的字符。配置方法有两种
配置方法一:
新建一个config.py文件配置secret_key
config.py
SECRET_KEY='XXXXXXXXXX'
然后在主运行文件里面添加config文件里面的内容
main.py
from flask import Flask,session
import config
app=Flask(__name__)
配置方法二:
直接在主运行模块里面配置,配置config的时候也是和操作字典是一样的
main.py
from flask import Flask,session
app=Flask(__name__)
app.config['SESSION_KEY']='XXXXXX'
#或 app.secret_key='xxxxxxx'
操作session ----与操作字典相同
#增
session['username']='helloWorld'
#查
result=session['key'] ###如果key不存在,会raise Error
result=session.get('key') ###如果key不存在,返回None
#删
session.pop('key')
#清空session
session.clear
设置session的过期时间
- 如果没有指定session的过期时间,默认是浏览器关闭以后就自动结束
- session.permanent=True在flask下可以将有效期延长至一个月
- 给app.config设置PERMANENT_SESSION_LIFETIME来更改有效期,这个值的数据类型是
datetime.timedelta
类型。在登陆网页界面的时候,有个‘记住我’的选项,如果点击了就把session的有效期延长一些,使用的就是这个。前提是要session.permanent=True
from flask import Flask,session
from datetime import timedelta
import os
app=Flask(__name__)
app.config['SECRET_KEY']=os.urandom(24)
session.permanent=True
app.config['PERMANENT_SESSION_LIFETIME']=datetime.timedelta(days=7)
class datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])
os.urandom(n) 返回一个有n个byte长的string,很适合勇于加密。这个函数返回的随机字节是根据不同的操作系统特定的随机函数资源。即,这个函数是调用OS内部自带的随机函数的。有特异性。
urandom中的u,文档中有这样的一句:The returned data should be unpredictable enough for cryptographic applications。注意到这个 unpredictable, 再结合之前所说的根据os底层来实现的,所以,u 应该是表示难以预料的意思。
os.urandom(n)参考于https://blog.csdn.net/a19990412/article/details/80934268
flask中session的流程详解
step1:
用户请求的request进来,实例化RequestContext,创建request_context对象,初始化session为空
step2:
当接受到用户请求之后,会调用Flask对象的session_interface对象的open_session方法,以此来获取一个session对象。
step3:
数据返回给用户,并把内容中的session重新保存
由上面两张图片中的代码可以看出,session确实是存储在浏览器中的。
更改session存储位置
这个博主写的很好,就直接贴链接了,侵删