【问题标题】:HttpSessionListener not detecting session timeoutHttpSessionListener 未检测到会话超时
【发布时间】:2011-03-22 11:04:18
【问题描述】:

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

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

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

我开始怀疑 HttpSessionListener 没有按照我的预期做,我错过了什么吗?

编辑:

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

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

【问题讨论】:

  • 你在web.xml中配置监听了吗?
  • @Suresh 是的,我的监听器是在 web.xml 中配置的;将更新我的问题
  • 我在 Tomcat 和 Java 1.7 中遇到了同样的问题:在打开浏览器时会话超时后并不总是调用“sessionDestroyed”。
  • @Andremoniy 如果浏览器打开并显示站点页面,那么它可能正在通过插件(如 Firebug)发送请求,这将使会话保持活动状态。还要记住 sessionDestroyed 仅在会话数据在服务器上被销毁时才被调用,这不一定与用户失去对它的访问权限相同。

标签: java jakarta-ee session-timeout


【解决方案1】:

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

根据我对 Tomcat 的了解,我相信这取决于每个 Web 容器的实现,会话过期每分钟都会发生。因此,即使在会话超时之后,也可能会延迟到下一次检测到过期。

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

【讨论】:

  • 有道理,我会尝试在 JBoss 中调整会话超时,看看我是否等待的时间不够长。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    相关资源
    最近更新 更多