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

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

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

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

【问题讨论】:

    标签: session tomcat servlets cookies 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!
    猜你喜欢
    • 2010-10-06
    • 2014-05-11
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多