HttpSessionListener未检测到会话超时

时间:2011-03-22 11:04:19

标签: java java-ee session-timeout

我有一个javax.servlet.http.HttpSessionListener的实现,它应该检测Struts项目中的用户会话失效/超时。

sessionDestroyed()似乎永远不会被调用,我可以通过删除我的JSESSIONID并刷新页面来重现它。我还发现,打开浏览器直到会话超时具有相同的效果。

该站点使用Java 1.5在JBoss 4.2.3.GA中运行。

我开始怀疑HttpSessionListener没有达到我的预期,我错过了什么?

修改:

我的监听器在我的web.xml中注册如下:

<listener>
    <listener-class>com.domain.web.listener.LogoutListener</listener-class>
</listener>

2 个答案:

答案 0 :(得分:5)

在Web容器到期会话之前,不会调用sessionDestroyed()方法。服务器不知道您删除了JSESSIONID cookie,您的浏览器看起来就像是另一个新会话。

从我在Tomcat中看到的,我相信这取决于每个Web容器实现,会话到期每分钟都会发生。因此,即使在会话超时之后,可能会有一段延迟,直到下次检测到到期。

但最终肯定会发生。特别是如果您将超时设置为一分钟并等待几分钟。请注意,超时以分钟为单位指定,因此一分钟是测试的最小值。我假设您在web.xml文件中注册了您的听众?

答案 1 :(得分:-2)

您需要在应用程序的WEB-INF下的web.xml中注册监听器。                    你的听众类名