3. flask中的session工作机制
- flask中的session机制是:把敏感数据经过加密后放入
session
中,然后再把session
存放到cookie
中,下次请求的时候,再从浏览器发送过来的cookie
中读取session
,然后再从session
中读取敏感数据,并进行解密,获取最终的用户数据。 - flask的这种
session
机制,可以节省服务器的开销,因为把所有的信息都存储到了客户端(浏览器)。 - 安全是相对的,把
session
放到cookie
中,经过加密,也是比较安全的,这点大家放心使用就可以了。
4. 操作session
- session的操作方式:
- 使用
session
需要从flask
中导入session
,以后所有和sessoin
相关的操作都是通过这个变量来的。 - 使用
session
需要设置SECRET_KEY
,用来作为加密用的。并且这个SECRET_KEY
如果每次服务器启动后都变化的话,那么之前的session
就不能再通过当前这个SECRET_KEY
进行解密了。 - 操作
session
的时候,跟操作字典是一样的。 - 添加
session
:session['username']
。 - 删除:
session.pop('username')
或者del session['username']
。 - 清除所有
session
:session.clear()
- 获取
session
:session.get('username')
- 设置session的过期时间:
- 如果没有指定session的过期时间,那么默认是浏览器关闭后就自动结束
- 如果设置了session的permanent属性为True,那么过期时间是31天。
- 可以通过给
app.config
设置PERMANENT_SESSION_LIFETIME
来更改过期时间,这个值的数据类型是datetime.timedelay
类型。
5. Code
# session_demo.py
from flask import Flask,session
import os
from datetime import timedelta
app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7)
# 添加数据到session中
# 操作session的时候,跟操作字典是一样的
# SECRET_KEY
@app.route('/')
def hello_world():
session['username'] = 'zhiliao'
# 如果没有指定session的过期时间,那么默认是浏览器关闭后就自动结束
# 如果设置了session的permanent属性为True,那么过期时间是31天。
session.permanent = True
return 'Hello World!'
@app.route('/get/')
def get():
# sesssion['username'] # 若不存在是会报错,建议使用get()
# session.get('username')
print(session.get('username'))
return 'sucess'
@app.route('/delete/')
def delete():
print(session.get('username'))
session.pop('username')
print(session.get('username'))
return 'success'
@app.route('/clear/')
def clear():
print(session.get('username'))
# 删除session中的所有数据
session.clear()
print(session.get('username'))
return 'success'
if __name__ == '__main__':
app.run(debug=True)