会话到期时间?

时间:2010-04-24 06:02:17

标签: java google-app-engine

我在我的应用上启用了会话:

// 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能自动解决这个问题吗?)

由于

3 个答案:

答案 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