【问题标题】:HttpSession.setMaxInactiveInterval not working in Tomcat 6HttpSession.setMaxInactiveInterval 在 Tomcat 6 中不起作用
【发布时间】:2009-12-04 17:03:29
【问题描述】:

我正在尝试使用 HttpSession.setMaxInactiveInterval 调整会话超时,但它不起作用。

这是我的代码(Groovy),它正在无异常地执行:

def paramValue = WebAttributes.REQUEST.getParameter('maxInactiveSeconds');
println 'paramValue=' + paramValue;
if (paramValue != null) {
  def seconds = Integer.parseInt(paramValue);
  WebAttributes.REQUEST.getSession().setMaxInactiveInterval(seconds);
}

一些细节:

  • Tomcat 6.0.16
  • 这发生在与“正常”应用程序分开的 web 应用程序中(即具有可视内容),但我已定义 emptySessionPath="true",因此会话 *应该* 跨 web 应用程序共享

谢谢,

哈鲁斯佩克斯

【问题讨论】:

    标签: tomcat jakarta-ee


    【解决方案1】:

    你是如何测试它的?每个新请求都会再次推迟超时,你知道吗?因此,在预期超时之前 F5 处理请求无济于事。网络容器也不会立即销毁会话,因此您不会立即看到来自任何HttpSessionListener 的结果。它会以一定的时间间隔收割它们,可能是每分钟,但也可以是每 15 分钟。但是,如果 超时后有新请求进入,它将立即获得它。

    关于您的“会话应该共享”短语,验证这一点的最佳方法当然是检查会话 ID,以编程方式(例如显示 ${pageContext.session.id})或仅确定您的网络浏览器中 jsessionid cookie 的值。

    要监控实际会话的创建和销毁,请实现一个虚拟HttpSessionListener。这是一个基本示例:

    public class MyHttpSessionListener implements HttpSessionListener {
        public void sessionCreated(HttpSessionEvent event) {
            System.out.printf("%s session %s created %n", new Date(), event.getSession().getId());
        }
        public void sessionDestroyed(HttpSessionEvent event) {
            System.out.printf("%s session %s destroyed %n", new Date(), event.getSession().getId());
        }
    }
    

    希望这会有所帮助。

    【讨论】:

    • 感谢您的周到和知识渊博的回复。我在页面上嵌入了基于 JavaScript 的会话超时警告消息。它基于 HttpSession.getMaxInactiveInterval() 启动一个持续时间的计时器。我的代码似乎根本没有改变这个值——我试图将它设置为 40 秒。 (用于自动化测试)但它仍然是 30 分钟。当页面租用时。
    【解决方案2】:

    原来有另一种技术将 maxInactiveInterval 设置回 30 分钟,覆盖了我更改它的尝试。

    Tomcat、Java 等都按预期工作。

    【讨论】:

    • 那是什么技术?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    • 2012-06-30
    • 2023-04-08
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    • 2014-03-05
    相关资源
    最近更新 更多