flask 中 session的源码解析
1、首先请求上下文和应用上下文中已经知道session是一个LocalProxy()对象
2、然后需要了解整个请求流程,
3、客户端的请求进来时,会调用app.wsgi_app(),于此此时,会生成一个ctx,
其本质是一个RequestContext对象
4、那我们点进RequestContext中,可以清晰的看到
在RequestContext 对象中定义了session,且初值为None。这就是session最初的值
5、再返回 wsgi_app函数中,ctx.push()函数
6.可以看出session 是通过open_session的执行。进入源码去分析
7、可以看出不管有没有cookie 当前方法的返回值都是通过session_class 得到的。那么代码往上看
8、那么我们一起来看一下 SecureCookieSession这个类
9、 SecureCookieSession
是基于 werkzeug/datastructures:CallbackDict
实现的,这个类可以指定一个函数作为 on_update
参数,每次有字典操作的时候(__setitem__
、__delitem__
、clear
、popitem
、update
、pop
、setdefault
)会调用这个函数
到现在为止整个流程走完了,session的本质就是一个特殊的字典,所有的操作都是和字典一致的。
02:26:492018-10-24