2010-08-26 106 views
2

我在Tomcat服务的Web应用程序中遇到了会话超时问题。通过阅读Tomcat的文档,会话在可以在web.xml文件中配置的时间后过期。如何让Tomcat中的HttpSession保持活跃状态​​?

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

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

如果是这样,就像我最初的想法一样,从会话最后一次访问开始30分钟,我似乎没有看到这种行为。我使用该网站时,我的会话似乎会丢失。除此之外,还有其他方法可以配置会话行为吗?有什么我失踪?

的Apache Tomcat/6.0.20

+0

相关:[Java Servlet实例化和会话变量](http://stackoverflow.com/questions/3106452/java-servlet-instantiation-and-session-variables)。 – BalusC 2010-08-26 22:56:23

回答

8

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

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

您可以像您所描述的那样在web.xml文件中设置它。

您也可以通过调用setMaxInactiveInterval(int interval) 将其设置为session对象这指定的时间,以秒为单位的客户端请求之间的servlet容器之前将否定这一会议。

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

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

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

相关问题