google应用引擎- GAE - Java中的持久http会话(浏览器/实例重启)



我想知道是否有一种"标准"的方式来处理基于GAE的web应用程序中的持久HTTP会话。让我解释一下我的问题。

如果我只使用this. getthreadlocalrequest (). getsession()来获取会话,一旦用户关闭浏览器,这个会话将自动失效。

如果我使用cookie(因此会话将持续到cookie过期或用户删除其cookie),我需要一种机制来验证存储在cookie中的sessionID实际上属于有效的会话。我考虑过在concurrentHashMap中存储sessionID, HttpSession的键值对,但是现在我遇到了这个哈希图只对当前实例可用的问题,因此我可能会遇到一致性问题。

我想到的最后一个解决方案是在数据存储中跟踪会话,但每次收到请求时都要查询数据存储,这对我来说似乎相当荒谬。

也许我完全偏离了轨道,有一个非常简单的方法来实现我想做的:Http会话在浏览器重启和多个gae实例中持续存在。

谢谢!罗德里戈。

您通常使用cookie来实现记住我。其思想是为经过身份验证的用户生成一个随机且唯一的cookie,将其与其他用户信息一起存储在数据库中,并将cookie发送给客户机浏览器。

现在,当客户端5天后回来时,cookie将与它的第一个请求一起发送到您的应用程序。此时,如果用户尚未经过身份验证,则可以从请求中提取cookie,在数据库中找到拥有此cookie的用户,并自动对他进行身份验证,就像他发送了凭据一样。

此解决方案不需要修改GAE如何处理会话的任何内容。