【问题标题】:Tomcat doesn't invalidates session after calling session.invalidate()调用 session.invalidate() 后,Tomcat 不会使会话无效
【发布时间】:2013-01-16 23:56:27
【问题描述】:

我在 jaxws 中有一个 Web 服务,我可以在登录后连接到该服务。一切正常,我通过登录名和密码并登录,我正在 WS 服务器上为该用户创建会话。毕竟我想注销,所以我删除了所有会话属性并调用 session.invalidate()。

属性被去掉了,但是进入tomcat管理器,看到session还在。

当我登录时,会话已将 setMaxInactiveInterval 设置为 7200 秒(2 小时)。会话当然会在这段时间之后被销毁,但是如果不再使用该会话,那么让空会话保持 2 小时是什么意思。

有没有办法完全销毁该会话?无需等待 2 小时?

【问题讨论】:

  • 所以您有某种“注销”网络服务请求?您不必删除会话属性:如果您使会话无效,则应该为您完成。您是否注册了任何 HttpSessionListener 或 HttpSessionBindingListener 对象?如果是这样,它们可能会干扰 Tomcat 实际使您的会话过期的能力。您不必等待 2 小时。
  • 我没有注册这两个听众。是的,这是某种注销。我知道我不应该等待 2 小时,但会话仍然处于活动状态。我将删除从会话中删除属性的部分。
  • 目前在 disconnect() 方法中,我有 session.setMaxInactiveInterval(1) 并且会话在 30 秒 - 1 分钟后被销毁,这比 2 小时要好,但我确信这是不好的解决方案。如果我将 session.invalidate() 添加到此方法中,会话将在 30 分钟后过期。我不知道为什么会这样,Session应该被销毁,但不是:/
  • 发生在哪个操作系统上?对我来说 session.invalidate() 在 Centos 操作系统中不起作用,但在 Windows 中同样可以。

标签: web-services session tomcat invalidation


【解决方案1】:

在您的回复中尝试这些

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); 
response.setHeader("Pragma", "no-cache"); 
response.setDateHeader("Expires", 0);

确保后续请求不会重新实例化您的会话。

【讨论】:

  • 是的,但它是网络服务,所以我真的不知道该放在哪里?在客户端还是服务器端?如何获取对响应对象的引用?
  • 服务器端,你不是在说 HttpSession 吗?
  • 是的,我说的是 HttpSession,但在 Web 服务上。我正在使用这个解决方案来维护会话:weblogs.java.net/blog/ramapulavarthi/archive/2006/06/… .
  • 这个答案完全没用,与HttpSession无关。
猜你喜欢
  • 2014-07-04
  • 2011-10-13
  • 2011-02-22
  • 1970-01-01
  • 2016-10-20
  • 1970-01-01
  • 2013-04-27
  • 1970-01-01
相关资源
最近更新 更多