我希望在webapp2中实现会话。从研究中,我发现this code sample使用webapp2_extra.sessions
,还有几篇文章提到过时或未维护的会话库。
我目前缺乏有关会话在概念上如何工作的知识。到目前为止,这是我的理解:
dispatch()
方法,该方法允许我们创建/更新会话对象;在应用程序的登录阶段,将创建会话。 (问题:会话如何存储?在应用程序的内存中还是在数据存储中?)我的理解正确吗?还是我错过了重要的事情?互联网上关于此主题的指导似乎很少。谢谢您的协助。
答案 0 :(得分:3)
从技术上讲,没有添加dispatch()
方法,它只是覆盖webapp2.RequestHandler
已经提供的方法,并将其扩展为增加会话支持。如果仔细研究一下该方法,您会发现它仍然调用原始方法进行实际的调度:
# Dispatch the request.
webapp2.RequestHandler.dispatch(self)
如果需要,可以将其重写为:
super(BaseHandler, self).dispatch()
扩展的dispatch()
所做的全部工作就是从商店中获取会话信息,以便在分派请求之前将其提供给处理程序代码(BTW包括请求处理),然后将其保存回去。处理完成(可能已更改会话信息时)。对于每个请求!只是在请求中保留信息的一种方式。
会话支持仅仅是- support -您的应用仍然是负责控制在webapp2
会话字典中存储哪些信息的应用,何时添加/修改/删除以及如何使用该信息。
换句话说,webapp2
本身不知道什么是登录/注销/用户会话等(因此,不行,您在#1,#2和#3中没有提及的事情在webapp2
中发生了) 。您的应用有责任:
用于存储会话信息的webapp2
支持cookie(默认),memcache和datastore (ndb)。来自会话:
它具有三个内置后端:安全cookie,内存缓存和 数据存储。可以添加新的后端扩展 CustomBackendSessionFactory。
会话存储可以使用不同的密钥提供多个会话, 通过该方法甚至可以在同一请求中使用不同的后端 SessionStore.get_session()。默认情况下,它使用 配置中的默认密钥。