flask-session
- 客户端进行第一次请求时,服务端创建session,并把敏感数据经过加密后放入
session
中 - 请求结束时,再把
session
存放到response的cookie
中返回给客户端,客户端保存cookie
。 - 下次请求的时候,服务器从浏览器发送过来的
cookie
中读取session
,然后再从session
中读取敏感数据并进行解密,获取最终的用户数据。
session操作
- session变量需要从flask导入,且全局共享(包括html)
- 使用
session
需要设置SECRET_KEY
加密,一般使用os.urandom(24)
方式随机加密 - 操作
session
的时候,跟操作字典是一样的。
- 添加
session
:session['username']
。 - 删除:
session.pop('username')
或者del session['username']
。 - 清除所有
session
:session.clear()
- 获取
session
:session.get('username')
- 如果没有指定session的过期时间,那么默认是浏览器关闭后就自动结束
- 如果
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7)
,那么就过期时间是7天 - 如果设置了
session.permanent=True
,那么过期时间是31天。但过期会自动刷新获取新的session,意味着永不不过期,其他过期时间配置也失效
案例Code
from flask import Flask,session, render_template
import os
from datetime import timedelta
app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7)
@app.route('/<username>')
def index(username):
session['username'] = username
return render_template('session.html')
@app.route('/delete/')
def delete():
print(session.get('username'))
session.pop('username')
print(session.get('username'))
return render_template('session.html')
@app.route('/clear/')
def clear():
print(session.get('username'))
session.clear()
print(session.get('username'))
return render_template('session.html')
if __name__ == '__main__':
app.run(debug=True)
<body>
<div>
{{ session.username | default("游客") }}
</div>
</body>
from flask import Flask, request, session, abort
import os
app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)
@app.route('/')
def index():
if not session.get('name'):
abort(401)
return 'Hello World'
@app.route('/login')
def login():
name = request.args.get('name')
pwd = request.args.get('pwd')
if name == 'zhangsan' and pwd == '123456':
session['name'] = name
return '登陆成功'
return '用户名或密码错误'
@app.route('/logout')
def logout():
session.pop('name', None)
return '退出成功'
if __name__ == '__main__':
app.run(debug=True)