flask-session
整个web工程,我认为只有一个session数据对象。在不同环境使用不同的属性、工具进行调用、传递。
session是实现状态保持的验证要求。(维持用户登录状态)
session在客户端(浏览器),就存在cookie内。一般是31天。
session在服务端,存储在MySQL数据库中(磁盘文件);“暂存”于Redis数据库中(内存中),数据以MySQL为准。
- 用户第一次保存session(注册时):
注册表单数据发送到服务端,request对象接受数据。
服务端校验账号、密码(加密);校验成功则将用户信息分别存储于Redis、MySQL数据库中。
返回校验成功结果、返回response(包含session_id);
客户端将返回的session保存在本地cookie中,刷新页面,进入登录状态。 - 用户再次请求时:
客户端发送request,每次都包含session_id;
服务端在解析数据后,通过session_id在Redis中读取数据,验证登录状态。
服务端业务处理request,返回response。 - Redis“暂存”session_id(读取查询性能高)实现状态保持,实现session的在客户端和MySQL之间共享和存储。
- 保证数据安全:session_id不能被轻易获取和解码,设置失效时间,用户部分操作必须再次校验用户身份。
大致有四个不同情况:
1 浏览器本地存储的session:
概念:基于cookie实现的,特殊key-value字符串,value存储在服务端。
作用:记录记录用户信息,实现用户登录状态的保持。
浏览器实现的,和框架语言无关。
2 flask内置的请求上下文对象:
简述: flask框架内置的,在客户端请求时产生。
作用:用来操作用户信息,实现状态保持。
配置:
session['xxx_id'] = 将MySQL数据库中的用户id存储在
session.get('xxx_id')
session.pop() / session.clear()
注意:基于flask产生。
3 session信息存储配置对象Session
概念:flask—session扩展包内置的Session类。
作用:指定服务端session信息存储位置。
配置:
SESSION_TYPE(数据库类型)
SESSION_REDIS(Redis实例对象)
SESSION_USER_SIGNER(用户签名)
PERMANENT_SESSION_LIFETIME(有效期)
注意:在配置文件中配置,还必须项目初始化中进行初始化操作。
1、2、3共同实现状态保持
4 数据库会话对象:
概念:flask_sqlalchemy扩展包内置的数据库会话操作对象。
作用:实现对msyql数据库的操作。
操作:
db.session.add
add_all
drop_all
delete
create_all
commit
rollback
备注:基于flask_sqlalchemy实现。