使用 google app-engine 跨浏览器/服务器重新启动会话持久性

2024-04-27

如何使会话在浏览器/服务器重新启动后持续存在?
我正在使用谷歌应用程序引擎。
每次重新启动浏览器和/或服务器时,我都会得到一个新的会话 ID。

String jSessionId=this.getThreadLocalRequest().getSession().getId();

End Goal
我所追求的最大胜利是长期存在的匿名帐户。
例如,用户可以执行操作 A,代表他们创建一个匿名帐户,然后第二天返回并使用与执行操作 A 相同的匿名帐户执行操作 B(假设他们在中间没有清除 cookie) )。

在某些时候,一旦他们被吸引,他们就可以决定验证/注册他们的帐户并保留他们已经完成的匿名工作的信用。


除非我在这里弄错了,而且很可能是这样(如果 Google 改变了 GAE 的内部结构),GAE 使用 memcache 和 DataStore 进行会话管理。因此,在会话过程中,会话数据将出现在 DataStore 中。

如果您打算进行持久会话,您有两种可能的操作方案:

  1. 使用 cookie,而不是现有的 JSESSIONID cookie,因为您将无法修改它。但是,我不太确定是否可以创建新的 cookie,因为似乎没有提到对 Cookie 类的支持。不过,您可能很幸运,因为 GAE 在内部使用 Jetty。然而,缺点是如果用户清除浏览器 cookie,这些数据将会丢失。
  2. 充分设计应用程序的会话管理,以便会话数据可以持久保存到数据存储中。这样,每当此类数据发生更改时,您都可以将其保存到 DataStore 中,并在用户下次通过应用程序身份验证时从 DataStore 中获取。这是假设 GAE 提供的现有会话管理基础设施正在净化它在 DataStore 中存储的内容(任何执行会话管理的应用程序都需要它 - 它应该清理无效会话)。

PS:服务器在GAE上重新启动应该ideally算得上是少之又少。当然,不要指望这个,因为 GAE 可能会出现中断 http://groups.google.com/group/google-appengine/msg/ba95ded980c8c179,在这种情况下,应用程序本身将不可用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 google app-engine 跨浏览器/服务器重新启动会话持久性 的相关文章

随机推荐