webapp2 会话:会话在概念上是如何工作的?
webapp2 Sessions: How do sessions work conceptually?
我希望在 webapp2 中实现会话。通过研究,我发现 this code sample 使用 webapp2_extra.sessions
,还有一些文章提到了已弃用或未维护的会话库。
我目前不了解会话在概念上是如何工作的。这是我目前的理解:
- 我们可以在请求处理程序中包含一个
dispatch()
方法,它允许我们 create/update 一个会话对象;在应用程序的登录阶段,会话被创建。 (问题:会话是如何存储的?在应用程序的内存中还是在数据存储中?)
- 当用户向应用发出请求时,dispatch() 方法会检查用户是否存在现有会话。 (问题:这个验证究竟是如何工作的?request.body 或会话寻找的 cookie 中是否有令牌?)
- 当用户注销时,会话将被删除。
我的理解对吗?或者也许我错过了一些重要的东西?互联网上似乎没有关于此主题的指导。感谢您的帮助。
从技术上讲,dispatch()
方法并没有被添加,它只是覆盖了 webapp2.RequestHandler
已经提供的方法,扩展它以添加会话支持。如果您仔细查看该方法,您会发现它仍然调用原始方法来进行实际调度:
# Dispatch the request.
webapp2.RequestHandler.dispatch(self)
如果需要,可以重写为:
super(BaseHandler, self).dispatch()
扩展 dispatch()
所做的就是从存储中获取会话信息,使其在发送请求(顺便说一句,包括请求处理)之前可供处理程序代码使用,然后将其保存回来,当请求处理完成(当对会话信息的更改可能已经完成时)。对于 每个 请求!只是一种跨请求保存信息的方法。
会话支持很简单 - 支持 - 你的应用程序仍然负责控制在 webapp2
的会话字典中存储的信息,当是该信息 added/modified/deleted 以及如何使用该信息。
换句话说 webapp2
本身不知道什么是 login/logout/user 会话等(所以不,你在 #1、#2 和 #3 中提到的任何事情都没有发生在 webapp2
本身)。您的应用有责任:
- set/delete 在会话字典中表示您的 "user session" 的信息(无论这对您的应用程序意味着什么)- 通常在用户 login/logout 请求处理程序中,分别为
- 在处理登录和注销之间的传入请求时使用它认为合适的信息 - 当来自会话字典的信息表示 "current user session".
用于存储会话信息 webapp2
支持 cookie(默认),memcache and datastore (ndb)。来自会话:
It has three built-in backends: secure cookies, memcache and
datastore. New backends can be added extending
CustomBackendSessionFactory.
The session store can provide multiple sessions using different keys,
even using different backends in the same request, through the method
SessionStore.get_session(). By default it returns a session using
the default key from configuration.
我希望在 webapp2 中实现会话。通过研究,我发现 this code sample 使用 webapp2_extra.sessions
,还有一些文章提到了已弃用或未维护的会话库。
我目前不了解会话在概念上是如何工作的。这是我目前的理解:
- 我们可以在请求处理程序中包含一个
dispatch()
方法,它允许我们 create/update 一个会话对象;在应用程序的登录阶段,会话被创建。 (问题:会话是如何存储的?在应用程序的内存中还是在数据存储中?) - 当用户向应用发出请求时,dispatch() 方法会检查用户是否存在现有会话。 (问题:这个验证究竟是如何工作的?request.body 或会话寻找的 cookie 中是否有令牌?)
- 当用户注销时,会话将被删除。
我的理解对吗?或者也许我错过了一些重要的东西?互联网上似乎没有关于此主题的指导。感谢您的帮助。
从技术上讲,dispatch()
方法并没有被添加,它只是覆盖了 webapp2.RequestHandler
已经提供的方法,扩展它以添加会话支持。如果您仔细查看该方法,您会发现它仍然调用原始方法来进行实际调度:
# Dispatch the request.
webapp2.RequestHandler.dispatch(self)
如果需要,可以重写为:
super(BaseHandler, self).dispatch()
扩展 dispatch()
所做的就是从存储中获取会话信息,使其在发送请求(顺便说一句,包括请求处理)之前可供处理程序代码使用,然后将其保存回来,当请求处理完成(当对会话信息的更改可能已经完成时)。对于 每个 请求!只是一种跨请求保存信息的方法。
会话支持很简单 - 支持 - 你的应用程序仍然负责控制在 webapp2
的会话字典中存储的信息,当是该信息 added/modified/deleted 以及如何使用该信息。
换句话说 webapp2
本身不知道什么是 login/logout/user 会话等(所以不,你在 #1、#2 和 #3 中提到的任何事情都没有发生在 webapp2
本身)。您的应用有责任:
- set/delete 在会话字典中表示您的 "user session" 的信息(无论这对您的应用程序意味着什么)- 通常在用户 login/logout 请求处理程序中,分别为
- 在处理登录和注销之间的传入请求时使用它认为合适的信息 - 当来自会话字典的信息表示 "current user session".
用于存储会话信息 webapp2
支持 cookie(默认),memcache and datastore (ndb)。来自会话:
It has three built-in backends: secure cookies, memcache and datastore. New backends can be added extending CustomBackendSessionFactory.
The session store can provide multiple sessions using different keys, even using different backends in the same request, through the method SessionStore.get_session(). By default it returns a session using the default key from configuration.