session
会话,是指将用户的信息存在服务器端.不同的框架有不同的实现方式.
在flask中,形式上是操作session对象,本质上还是将数据存在了cookie中
flask-session
可以设置信息存在服务器的redis,或mysql,以及文件中.而在cookie中存一个key,用来查询
原理:
- 请求刚到来:获取通过cookie随机字符串,存在则去“数据库”中获取原来的个人数据,否则创建一个空容器(flask中的session对象)。
- 视图:操作内存中对象(随机字符串,{放置数据的容器})
- 响应:内存对象(随机字符串,{放置数据的容器})
- 将数据保存到“数据库”(这个数据库可以是客户端的cookie或者服务端的redis,mysql,mongo,file)
- 把随机字符串写在用户cookie中
1.flask原始session
在实际应用中,我们只要在session中存储user_id,通过判断session中有没有user_id就可以判断用户是否登录
from flask import Flask, session
app = Flask(__name__)
app.config['SECRET_KEY'] = "123" # 保存在客户端的cookie中,所以要求强制加密
@app.route('/get')
def index():
name = session.get('name')
pwd = session.get('pwd')
print(pwd)
return name or '没有session'
@app.route('/set')
def get_session():
session['name'] = 'wang'
session['pwd'] = '123'
return '设置session!'
if __name__ == '__main__':
app.run()
2.自定义session行为模式
重写app.session_interface
即可,flask-session
既是这样实现的
from flask import Flask,session
app = Flask(__name__)
app.secret_key = '123'
import json
class MySessionInterFace(object):
def open_session(self,app,request):
return {}
def save_session(self, app, session, response):
response.set_cookie('123',json.dumps(session))
def is_null_session(self, obj):
"""Checks if a given object is a null session. Null sessions are
not asked to be saved.
This checks if the object is an instance of :attr:`null_session_class`
by default.
"""
return False
app.session_interface = MySessionInterFace()
@app.route('/')
def index():
session['xxx'] = 123
return 'Index'
if __name__ == '__main__':
app.run()
参考:
https://blog.csdn.net/feit2417/article/details/80735527