当前位置: 首页 > 面试题库 >

HttpSessionListener未检测到会话超时

柳业
2023-03-14
问题内容

我有一个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>

问题答案:

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

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

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



 类似资料:
  • 我读过关于命名空间属性的文章。我尝试使用此功能: 它工作得很好。 作为一项改进,我希望覆盖会话服务,因此它将在任何地方使用,并使用依赖注入,而不是将会话服务耦合到addProduct函数中。 为此,我编辑了我的services.yaml 然后我更新CartController: 现在我得到了以下错误消息: 检测到服务“会话”的循环引用,路径:“会话”- 这个错误应该在这个问题上得到解决:#3626

  • 在 HTTP 协议中,当客户端不再处于活动状态时没有显示的终止信号。这意味着当客户端不再处于活跃状态时可以使用的唯一机制是超时时间。 Servlet 容器定义了默认的会话超时时间,且可以通过 HttpSession 接口的 getMaxInactiveInterval 方法获取。开发人员可以使用HttpSession 接口的 setMaxInactiveInterval 方法改变超时时间。这些方法

  • 综述 在这个阶段测试者检查应用程序在用户空闲一段时间后是否会自动登出,确保不可能重用相同的会话,并且没有敏感信息遗留在浏览器缓存中。 所有应用程序应该实现会话空闲超时机制。这种超时时间定义为会话在没有用户活动下维持激活状态的一段时间,即在上次最后收到的该会话ID的HTTP请求之后经过一段预设的时间后结束并销毁会话的机制。大多数情况下,最合适的超时时间应该在安全(更短的超时时间)和可用(较长的超时时

  • 问题内容: 我有一个使用spring和hibernate的java stuts2 Web应用程序。 我越来越。 SpringBean.xml hibernate.cfg.xml CustomerServiceImpl.java CustomerDaoImpl.java CustomerAction.java 我得到的例外 问题答案: 您在Spring配置中指定了一个事务管理器,但是没有关于何时或何

  • 问题内容: 我在用户登录时创建会话,如下所示: 如何在X分钟的会话上指定超时,然后在达到X分钟后让它执行功能或页面重定向? 编辑:我忘了提及由于不活动,我需要会话超时。 问题答案: 首先,存储用户最后一次发出请求的时间 在后续请求中,检查他们多久之前提出了请求(在此示例中为10分钟)

  • 问题内容: 我在Sun的“ Core Servlets and JavaServer Pages vol 2”中看到了带有会话计数器的示例。 计数器仅仅是建立在和递增/递减会话数与/ : 侦听器在上下文中注册自身,因此可以访问它并获取计数器值。 没有同步块。 安全,不是吗? 可以缓存在CPU寄存器中,并且对于使用? 问题答案: Servlet 3.0的规范规定(第11.5节): 侦听器实例和线程