0

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

如果我只使用 this.getThreadLocalRequest().getSession() 来获取会话,一旦用户关闭浏览器,该会话就会自动失效。

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

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

也许我完全脱离了轨道,并且有一种非常简单的方法可以实现我想要做的事情:在浏览器重启和多个 gae 实例中持续存在的 Http 会话。

谢谢!罗德里戈。

4

1 回答 1

2

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

现在,当客户端在 5 天后返回时,cookie 会与它的第一个请求一起发送到您的应用程序。这时,如果用户还没有被认证,你可以从请求中提取cookie,在数据库中找到拥有这个cookie的用户,并自动认证他,就像他发送了他的凭据一样。

此解决方案不需要对 GAE 处理会话的方式进行任何修改。

于 2012-12-28T23:19:18.650 回答