Flask中的cookie和session的处理
session设置
- session本质就是cookie
- Flask中session必须加盐才能设置:
- 盐:app.secret_key;通过给该变量进行赋值即可加盐;
- session用法:
- 雷同与Django;
- session需要导入;
- 设置session:
session[key] = value
- 删除某个session:
session.pop(key)
session源码流程
- 请求进来后执行__call__方法:
- 执行 self.wsgi_app(), 在里面对基本的请求信息进行了基本的封装:
- 基本请求信息的封装:实例化了RequestContext对象,并且利用组合将Request对象也进行了封装;
- 顺序执行 ctx.push() 方法
- 在push方法中,分别将 request,session等都放入了上下文管理器中:
def push(self): top = _request_ctx_stack.top if top is not None and top.preserved: top.pop(top._preserved_exc) # Before we push the request context we have to ensure that there # is an application context. app_ctx = _app_ctx_stack.top if app_ctx is None or app_ctx.app != self.app: app_ctx = self.app.app_context() app_ctx.push() self._implicit_app_ctx_stack.append(app_ctx) else: self._implicit_app_ctx_stack.append(None) if hasattr(sys, 'exc_clear'): sys.exc_clear() _request_ctx_stack.push(self) # 执行session if self.session is None:
# app.session_interface = SecoureCookieSessionInterface() session_interface = self.app.session_interface
# session_interface.open_session = SecourseCookieSessionInterface.open_session
# 真正的session封装 self.session = session_interface.open_session( self.app, self.request ) if self.session is None: self.session = session_interface.make_null_session(self.app)