我在我的应用上启用了会话:
// appengine-web.xml
<sessions-enabled>true</sessions-enabled>
当我在我的域下加载不同的页面时,它们似乎正常工作。但是,如果我关闭浏览器,看起来会话终止。重新启动浏览器会显示上一个会话不再可用。
这可能没问题,只是想知道这是否记录在案,所以我可以依靠这个事实?
我尝试了以下测试,以测试我们是否可以调整它:
// in web.xml
<session-config>
<session-timeout>10</session-timeout>
</session-config>
也
// in my servlet
getThreadLocalRequest().getSession().setMaxInactiveInterval(60 * 5);
但同样的行为,浏览器重启后会话数据不再可用。
我查看了项目的统计信息,我看到数据用于“_ah_SESSION”对象之类的东西。这些是来自上面的会议吗?如果是这样,它们不应该被清理,因为它们不再有效吗? (希望gae能自动解决这个问题吗?)
由于
答案 0 :(得分:4)
使用Google帐户,会话到期实际上是在App Engine管理控制台中处理,而不是通过Java处理。在http://appengine.google.com/登录管理控制台并选择“应用程序设置”,然后将“Cookie过期”更改为最适合您的时间段。
答案 1 :(得分:2)
这就是会话的工作方式。 JSESSIONID通常在HTTP中保存会话ID。
当浏览器关闭会话时,会话仍然在服务器中保持活动状态,并且在一段时间后释放所有过期的会话
当您重新打开新的浏览器会话时,浏览器不知道以前的任何会话,因此会创建一个新的会话
有这方面的解决方法...
- 创建一个Cookie
- 将唯一变量存储在隐藏的表单字段中并使用它
- URL重写
答案 2 :(得分:1)
默认情况下,Jetty *设置一个JSESSIONID cookie(基于会话),这意味着它将在浏览器关闭后被删除。 再次打开浏览器时,将创建一个新的JSESSIONID cookie,并丢失先前的会话上下文。
如果您想让cookie保持更长时间,那么只需在web.xml上添加以下配置:
设置Cookie到期时间
<context-param>
<param-name>org.mortbay.jetty.servlet.MaxAge</param-name>
<!-- amount of seconds (1 month in this case) -->
<param-value>2592000</param-value>
</context-param>
此外,您应该让google知道会话在_ah_SESSION
中保留多长时间设置会话到期时间
<session-config>
<!-- minutes of inactivity: (1 month in this case) -->
<session-timeout>43200</session-timeout>
</session-config>
*其他Jetty配置可在此处找到:https://wiki.eclipse.org/Jetty/Howto/SessionIds