一、首先請求上下文和應用上下文中已經知道session是一個LocalProxy()對象cookie
二、而後須要瞭解整個請求流程,session
三、客戶端的請求進來時,會調用app.wsgi_app(),於此此時,會生成一個ctx,app
其本質是一個RequestContext對象函數
四、那咱們點進RequestContext中,能夠清晰的看到spa
在RequestContext 對象中定義了session,且初值爲None。這就是session最初的值code
五、再返回 wsgi_app函數中,ctx.push()函數對象
6.能夠看出session 是經過open_session的執行。進入源碼去分析blog
七、能夠看出無論有沒有cookie 當前方法的返回值都是經過session_class 獲得的。那麼代碼往上看源碼
八、那麼咱們一塊兒來看一下 SecureCookieSession這個類it
九、 SecureCookieSession
是基於 werkzeug/datastructures:CallbackDict
實現的,這個類能夠指定一個函數做爲 on_update
參數,每次有字典操做的時候(__setitem__
、__delitem__
、clear
、popitem
、update
、pop
、setdefault
)會調用這個函數
到如今爲止整個流程走完了,session的本質就是一個特殊的字典,全部的操做都是和字典一致的。
02:26:492018-10-24