HttpSession.setMaxInactiveInterval在Tomcat 6中不工作

HttpSession.setMaxInactiveInterval在Tomcat 6中不工作,tomcat,jakarta-ee,Tomcat,Jakarta Ee,我正在尝试使用HttpSession.setMaxInactiveInterval调整会话超时,但它不起作用 下面是我的Groovy代码,它执行时没有异常: def paramValue = WebAttributes.REQUEST.getParameter('maxInactiveSeconds'); println 'paramValue=' + paramValue; if (paramValue != null) { def seconds = Integer.parseInt(p

我正在尝试使用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应用程序之间共享 谢谢


haruspex

您是如何测试它的?每一个新的请求都会再次推迟超时,你知道吗?因此,在预期超时之前对请求进行F5处理是没有帮助的。webcontainer也不会立即销毁会话,因此您不会看到任何HttpSessionListener的即时结果。它将以一定的间隔收获它们,可能是每分钟一次,也可能是每15分钟一次。但是,如果超时后出现新请求,它将立即获取它

关于您的会话应该是共享的短语,验证这一点的最佳方法当然是通过检查会话ID,或者通过编程方式(例如,显示${pageContext.session.ID})或者仅通过确定webbrowser中JSSessionID cookie的值

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

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());
    }
}

希望这有帮助。

您是如何测试它的?每一个新的请求都会再次推迟超时,你知道吗?因此,在预期超时之前对请求进行F5处理是没有帮助的。webcontainer也不会立即销毁会话,因此您不会看到任何HttpSessionListener的即时结果。它将以一定的间隔收获它们,可能是每分钟一次,也可能是每15分钟一次。但是,如果超时后出现新请求,它将立即获取它

关于您的会话应该是共享的短语,验证这一点的最佳方法当然是通过检查会话ID,或者通过编程方式(例如,显示${pageContext.session.ID})或者仅通过确定webbrowser中JSSessionID cookie的值

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

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());
    }
}

希望这能有所帮助。

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


Tomcat、Java等都按预期工作。

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


Tomcat、Java等都按预期工作。

感谢您周到且知识渊博的回复。我在页面上嵌入了一条基于JavaScript的会话超时警告消息。它根据HttpSession.getMaxInactiveInterval启动一个持续时间为的计时器。我的代码似乎根本没有改变这个值——我尝试将它设置为40秒。对于自动测试,但仍然需要30分钟。当页面租用者。感谢您周到和知识渊博的答复。我在页面上嵌入了一条基于JavaScript的会话超时警告消息。它根据HttpSession.getMaxInactiveInterval启动一个持续时间为的计时器。我的代码似乎根本没有改变这个值——我尝试将它设置为40秒。对于自动测试,但仍然需要30分钟。当页面租用者。那是什么技术?那是什么技术?