2013-01-16 45 views
0

我有一个jaxws中的webservice,我可以在登录后连接到它。一切正常,我通过登录名和密码登录,并且正在为WS服务器上的此用户创建会话。毕竟我想注销,所以我删除所有的会话属性,我打电话session.invalidate()。在调用session.invalidate后,Tomcat不会使会话失效()

属性被删除,但是当我进入tomcat管理器时,我看到会话仍然存在。

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

是否有办法彻底销毁该会话?不等2小时?

+0

因此,您有某种“注销”Web服务请求?您不应该删除会话属性:如果您使会话无效,应该为您完成。你有没有注册任何HttpSessionListener或HttpSessionBindingListener对象?如果是这样,他们可能会干扰Tomcat实际到期会话的能力。你不必等待2个小时。 –

+0

我没有注册这两个听众中的任何一个。是的,它是某种注销。我知道我不应该等待2个小时,但仍然是活动。我将删除从会话中删除属性的部分。 –

+0

当前在disconnect()方法中,我有session.setMaxInactiveInterval(1),会话在30s - 1min后被销毁,这比2小时更好,但我确定这是不好的解决方案。如果我将此方法添加session.invalidate(),则会话将在30分钟后过期。我不知道它为什么会发生,Session应该被销毁,但它不是:/ –

回答

0

在响应

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

尝试这些为了确保subsecquent请求不应再实例化会话。

+0

是的,但它是网络服务,所以我真的不知道该把它放在哪里?在客户端或服务器端?我如何获得对响应对象的引用? –

+0

服务器端,你不是在谈论HttpSession? – TheWhiteRabbit

+0

是的,我在谈论HttpSession,但在Web服务上。我正在使用此解决方案维护会话:http://weblogs.java.net/blog/ramapulavarthi/archive/2006/06/maintaining_ses.html。 –

相关问题