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