如何在Tomcat中保持HttpSessions活着?

时间:2010-08-26 22:03:55

标签: session tomcat servlets tomcat6 httpsession

我在Tomcat服务的Web应用程序中遇到Session超时有点麻烦。通过阅读Tomcat的文档,会话可以在web.xml文件中配置一段时间后到期。

<session-config>
        <session-timeout>30</session-timeout>
    </session-config>

Quesion)这是否意味着从为用户创建会话的30分钟后?或者上次访问会话后30分钟?

如果是,正如我原先想的那样,从上次访问会话开始的30分钟后,我似乎没有看到这种行为。当我使用该网站时,我的会话似乎丢失了。除了这一个设置之外,还有其他方法可以配置会话行为吗?有什么我想念的吗?

Apache Tomcat / 6.0.20

1 个答案:

答案 0 :(得分:8)

当Web浏览器连接到您的应用程序时,会启动会话。当最长不活动时间过去(30分钟)时,Tomcat会关闭服务器上的会话。

只要Web浏览器上有活动,例如刷新当前页面或浏览应用程序控件下的其他页面,就会重置此超时。仅保持浏览器窗口打开不会使会话保持打开状态,因为它不会在浏览器上生成任何活动。

您可以按照描述在web.xml文件中进行设置。

您也可以通过调用sessionsetMaxInactiveInterval(int interval)对象设置它 这指定了servlet容器使此会话无效之前的客户端请求之间的时间(以秒为单位)。

您必须确保浏览器的 Cookie 已启用。否则,您将为每个请求创建一个新会话。您应该为应用程序中的每个URL调用HttpServletResponse.encodeURL(String url)。来自api doc:

“通过在其中包含会话ID来对指定的URL进行编码,或者,如果不需要编码,则返回不变的URL。此方法的实现包括确定是否需要编码会话ID的逻辑在URL中。例如,如果浏览器支持cookie,或者关闭会话跟踪,则不需要URL编码。

对于健壮的会话跟踪,servlet发出的所有URL都应该通过此方法运行。否则,URL重写不能用于不支持cookie的浏览器。“