我有一个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>
答案 0 :(得分:5)
在Web容器到期会话之前,不会调用sessionDestroyed()
方法。服务器不知道您删除了JSESSIONID
cookie,您的浏览器看起来就像是另一个新会话。
从我在Tomcat中看到的,我相信这取决于每个Web容器实现,会话到期每分钟都会发生。因此,即使在会话超时之后,可能会有一段延迟,直到下次检测到到期。
但最终肯定会发生。特别是如果您将超时设置为一分钟并等待几分钟。请注意,超时以分钟为单位指定,因此一分钟是测试的最小值。我假设您在web.xml
文件中注册了您的听众?
答案 1 :(得分:-2)
您需要在应用程序的WEB-INF下的web.xml中注册监听器。 你的听众类名