为 Tomcat 为 servlet 会话发送的 JSESSIONID cookie 设置过期日期的最佳方法是什么?
默认情况下,cookie 的过期日期似乎是“会话”,这意味着一旦浏览器重新启动,会话就会在客户端中消失。但我想保持它打开 12 小时,即使在浏览器重新启动后(然后会相应地在服务器中配置会话超时)。
有没有办法在 Tomcat 中设置过期日期,例如使用一些配置选项或扩展模块?或者是否有可靠的方法使用 Servlet 过滤器设置 JSESSIONID 的到期日期?
为 Tomcat 为 servlet 会话发送的 JSESSIONID cookie 设置过期日期的最佳方法是什么?
默认情况下,cookie 的过期日期似乎是“会话”,这意味着一旦浏览器重新启动,会话就会在客户端中消失。但我想保持它打开 12 小时,即使在浏览器重新启动后(然后会相应地在服务器中配置会话超时)。
有没有办法在 Tomcat 中设置过期日期,例如使用一些配置选项或扩展模块?或者是否有可靠的方法使用 Servlet 过滤器设置 JSESSIONID 的到期日期?
从 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 代码的情况下不可能做你想做的事。
但是请注意,它可能会产生令人讨厌的副作用:如果用户启动会话并保持活动状态 12 小时,则其会话超时将相应更新(超时将在每次请求时更新),但其 cookie 不会,并且因此,用户将在 12 小时后失去其会话,即使他一直处于活动状态。