webapp2会话:会话如何在概念上发挥作用?

问题描述 投票:2回答:1

我希望在webapp2中实现会话。从研究中,我发现使用this code samplewebapp2_extra.sessions,以及一些提及已弃用或未维护的会话库的文章。

我目前缺乏会话如何在概念上工作的知识。这是我到目前为止所理解的:

  1. 我们可以在请求处理程序中包含dispatch()方法,该处理程序允许我们创建/更新会话对象;在应用程序的登录阶段,会话已创建。 (问题:如何存储会话?在应用程序的内存或数据存储区中?)
  2. 当用户向应用程序发出请求时,dispatch()方法会检查用户是否存在现有会话。 (问题:此验证究竟是如何工作的?会话中查找的request.body或cookie中是否有令牌?)
  3. 用户注销时,会话将被删除。

我的理解是否正确?或许我错过了一些重要的事情?在互联网上似乎没有关于这个主题的指导。感谢您的帮助。

google-app-engine session webapp2
1个回答
3
投票

从技术上讲,没有添加dispatch()方法,它只是覆盖webapp2.RequestHandler已经提供的方法,扩展它以添加会话支持。如果仔细查看该方法,您会发现它仍然调用原始方法来进行实际调度:

        # Dispatch the request.
        webapp2.RequestHandler.dispatch(self)

如果你愿意,可以重写,如:

        super(BaseHandler, self).dispatch()

扩展的dispatch()所做的就是从商店中获取会话信息,使其在发送请求之前可用于处理程序代码(BTW包括请求处理)并在请求处理完成后将其保存回来(当更改为会话信息可能已经完成)。满足每一个要求!只是一种在请求中保留信息的方法。

会话支持就是 - 支持 - 您的应用程序仍然负责控制webapp2会话字典中存储的信息,何时添加/修改/删除信息以及如何使用该信息。

换句话说,webapp2本身并不知道登录/注销/用户会话等等(所以不,你在#1,#2和#3中提到的任何内容都不会发生在webapp2本身)。您的应用程序负责:

  • 在会话字典中设置/删除代表您的“用户会话”的信息(对您的应用程序意味着什么) - 通常分别在用户登录/注销请求处理程序中
  • 在处理登录和注销之间的传入请求时使用该信息,因为会话字典中的信息代表“当前用户会话”。

对于存储会话信息,webapp2支持cookie(默认),memcachedatastore (ndb)。从会话:

它有三个内置后端:安全cookie,内存缓存和数据存储。可以添加新的后端扩展CustomBackendSessionFactory

会话存储可以通过SessionStore.get_session()方法使用不同的密钥提供多个会话,甚至在同一请求中使用不同的后端。默认情况下,它使用配置中的默认密钥返回会话。

© www.soinside.com 2019 - 2024. All rights reserved.