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实现。

session 的存放位置只能是在服务器上 session存在数据库还是哪里_服务端