Tomcat 中带有过期日期的 JSESSIONID Cookie

Posted

技术标签:

【中文标题】Tomcat 中带有过期日期的 JSESSIONID Cookie【英文标题】:JSESSIONID Cookie with Expiration Date in Tomcat 【发布时间】:2011-06-23 10:03:57 【问题描述】:

为 Tomcat 为 servlet 会话发送的 JSESSIONID cookie 设置过期日期的最佳方法是什么?

默认情况下,cookie 的过期日期似乎是“会话”,这意味着一旦浏览器重新启动,会话就会在客户端中消失。但我想保持它打开 12 小时,即使在浏览器重新启动后(然后会相应地在服务器中配置会话超时)。

有没有办法在 Tomcat 中设置过期日期,例如使用一些配置选项或扩展模块?或者是否有可靠的方法使用 Servlet 过滤器设置 JSESSIONID 的到期日期?

【问题讨论】:

【参考方案1】:

从 Servlet 3.0 开始,这可以简单地在 web.xml 中指定:

<session-config>
    <session-timeout>720</session-timeout> <!-- 720 minutes = 12 hours -->
    <cookie-config>
        <max-age>43200</max-age> <!-- 43200 seconds = 12 hours -->
    </cookie-config>
</session-config>

请注意,session-timeout 以分钟为单位,而max-age 以秒为单位。

【讨论】:

这没有帮助,因为 Tomcat 不会在每个请求上重新发送 jsession-id。因此,即使用户发送后续请求,tomcat 会话也会被扩展,但 cookie 的 max-age 不会,导致用户即使处于活动状态也会丢失其会话。 @Yamcha 我认为你是对的,但是也许有足够长的过期时间只会导致用户每 12 小时后需要重新登录,即使他当时处于活动状态。还不错。【参考方案2】:

我认为在不更改 Tomcat 代码的情况下不可能做你想做的事。

但请注意,它可能会产生令人讨厌的副作用:如果用户启动会话并保持活动状态 12 小时,则其会话超时将相应更新(超时将在每次请求时更新),但其 cookie 不会t,因此用户将在 12 小时后失去其会话,即使他一直处于活动状态。

【讨论】:

Sander 的回答表明这确实是可能的,并且快速的谷歌显示 Servlet 3.0 是在 2009 年发布的,这表明这个答案在发布时是不正确的。因此,-1!

以上是关于Tomcat 中带有过期日期的 JSESSIONID Cookie的主要内容,如果未能解决你的问题,请参考以下文章

嵌入式 Tomcat 中带有 JSP 标签库的 Spring-Boot

Snowflake - 创建名称中带有日期变量的表

$catalina_home/lib 中带有 mysql 驱动程序的 maven tomcat 插件

参数中带有日期时间的 Sonarqube API 响应

JQuery数据表中带有时间戳排序问题的日期

php sql中带有日期、变量类别和总和值的数据透视表