【发布时间】:2011-07-08 07:38:53
【问题描述】:
我们可以通过在文件 appengine-web.xml 中将 session-enabled 设置为 true 来启用会话。但是,GAE 实现的会话在关闭浏览器后并不持久。我的问题是如何保持会话持久化,以便可以实现“记住我”功能。有许多 Python 库,但我找不到任何适用于 Java 的库。非常感谢您的帮助!
【问题讨论】:
标签: java google-app-engine session remember-me
我们可以通过在文件 appengine-web.xml 中将 session-enabled 设置为 true 来启用会话。但是,GAE 实现的会话在关闭浏览器后并不持久。我的问题是如何保持会话持久化,以便可以实现“记住我”功能。有许多 Python 库,但我找不到任何适用于 Java 的库。非常感谢您的帮助!
【问题讨论】:
标签: java google-app-engine session remember-me
执行此操作的常用方法是将唯一的随机密钥与您的用户相关联,将其存储在持久性 cookie 中(使用 Cookie.setMaxAge() 和您希望此 cookie 保持有效的秒数),然后将此 cookie 发送到用户。
在 javadoc 中查找 HttpServletResponse.addCookie(向用户发送 cookie)和 HttpServletRequest.getCookies()(从客户端取回 cookie)。
【讨论】:
由于我们无法将评论标记为答案(有些人可能会完全错过它),我将根据上面的 JB 指出具体的解决方案。使用this.getThreadLocalRequest().getSession().getId() 获取会话ID。使用 Cookies.setCookie(...) 将 sid 以 JSESSIONID 的形式存储在 cookie 中
这将覆盖 GAE 创建的 cookie,保持相同的会话 ID,但应用您的到期时间。不过要小心你如何使用它,它很容易受到攻击(查找会话劫持和 XSS)。
【讨论】: