我想知道在基于GAE的Web应用程序中是否存在处理持久性HTTP会话的“标准”方式。让我解释一下我的问题。
如果我只使用this.getThreadLocalRequest()。getSession()来获取会话,一旦用户关闭浏览器,该会话将自动失效。
如果我使用Cookies(因此会话将持续到cookie过期或用户删除其cookie),我需要一种机制来验证存储在cookie中的sessionID实际上属于有效会话。我想过在concurrentHashMap中存储一对密钥值sessionID,HttpSession,但现在我遇到了这个hashmap只能用于当前实例的问题,因此我可能会遇到一致性问题。
我想到的最后一个解决方案是跟踪数据存储区中的会话,但每次收到请求时我都不得不查询数据存储区。
也许我完全脱离了轨道,并且有一种非常简单的方法来实现我想要做的事情:在浏览器重启和多个gae实例中持续存在的Http会话。
谢谢! 罗德里戈。
答案 0 :(得分:2)
您通常使用Cookie来实现记住我。这个想法是为经过身份验证的用户生成一个随机且唯一的cookie,将其与用户信息的其余部分一起存储在数据库中,然后将cookie发送到客户端浏览器。
现在,当客户端在5天后回来时,cookie会在第一次请求时发送给您的应用程序。此时,如果用户尚未通过身份验证,您可以从请求中提取cookie,在数据库中查找拥有此cookie的用户,并自动验证他,就像他发送了他的凭据一样。
此解决方案无需修改GAE处理会话的方式。