【问题标题】:How Do I Keep HttpSessions Alive in Tomcat?如何在 Tomcat 中保持 HttpSessions 处于活动状态?
【发布时间】:2011-04-04 12:59:29
【问题描述】:

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

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

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

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

Apache Tomcat/6.0.20

【问题讨论】:

标签: session tomcat servlets tomcat6 httpsession


【解决方案1】:

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

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2022-06-28
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    相关资源
    最近更新 更多