2010-04-24 112 views
1

我已经启用我的应用程序会话:会话到期时间?

// 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自动处理的呢?)

感谢

回答

2

那是怎样一个会话工作。 JSESSIONID通常在HTTP中保存会话ID。 当浏览器关闭会话时,会话在服务器中仍然保持活动状态,并且一段时间后释放所有过期的会话。
当您重新打开新的浏览器会话时,浏览器不知道任何以前的会话,因此创建一个新会话。
有此解决方法...
- 创建一个cookie
- 在一个隐藏的表单字段存储唯一的变量并使用它。
- URL重写

+0

你基本上是正确的,尽管在这种情况下,我想浏览器已经在使用cookies了 - 只是会话cookie,当浏览器关闭时会过期。这一切都按J2EE的预期工作。 – 2010-04-25 10:26:56

4

使用Google帐户,会话过期实际上是在App Engine管理控制台中处理的,而不是通过Java。登录到您的管理控制台http://appengine.google.com/并选择“应用程序设置”,然后将“Cookie过期”更改为最适合您的期限。

+0

最低设置为1天。它需要和web.xml中session-timout的设置时间一样长,但是它需要更长的时间吗? – 2012-06-30 00:49:30

+0

当然,很多原因 - 例如,如果您使用它来跟踪用户登录,并且您不希望他们每天都必须重新登录。 – 2012-07-02 00:50:48

+1

嗯,但独立于我设置的期限,1天或1周,cookie本身表示在浏览器关闭时过期。 – Mark 2014-06-29 13:49:08

0

默认情况下,Jetty *会设置JSESSIONID cookie(基于会话),这意味着它将在浏览器关闭后被删除。 当浏览器再次打开时,将创建一个新的JSESSIONID cookie并丢失以前的会话上下文。

如果您想让Cookie保持活动状态的时间更长,那么只需在网络上添加以下配置即可。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> 

另外,你应该让谷歌知道多久应当保持会议在_ah_SESSION

设置会话到期时间

<session-config> 
    <!-- minutes of inactivity: (1 month in this case) --> 
    <session-timeout>43200</session-timeout> 
</session-config> 

*其他码头配置可以在这里找到:https://wiki.eclipse.org/Jetty/Howto/SessionIds