2

我在 Tomcat 服务的 Web 应用程序中遇到了会话超时问题。通过阅读 Tomcat 的文档,会话在可以在 web.xml 文件中配置的时间后过期。

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

问题)这是否意味着从为用户创建会话起 30 分钟?还是从上次访问会话开始的 30 分钟?

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

Apache Tomcat/6.0.20

4

1 回答 1

8

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

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

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

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

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

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

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

于 2010-08-26T22:29:45.127 回答