2013-05-21 32 views
1

我实现了一个SessionListener跟踪如何在登录时强制Tomcat删除过期会话用户关闭浏览器?

我在web.xml设置我的web服务器的开放会话:

<listener> 
    <listener-class>demo.MyHttpSessionListener</listener-class> 
</listener> 
<session-config> 
    <session-timeout>1</session-timeout> 
</session-config> 

我demo.MyHttpSessionListener.groovy:

class MyHttpSessionListener implements HttpSessionListener { 
    @Override 
    public void sessionCreated(HttpSessionEvent event) { 
    ... 
    } 

    @Override 
    public void sessionDestroyed(HttpSessionEvent event) { 
     ... 
    } 
} 

当我去我的网站sessionCreated被调用。 sessionDestroyed在我关闭浏览器等待会话超时时调用。

当我在我的网站上登录并关闭我的浏览器时,会出现此问题。在这种情况下,会话已销毁永远不会在超时后调用。为什么当用户登录并关闭浏览器时会永远不会被删除? 在关闭浏览器并等待超时时间后,如何让已登录用户的过期会话被删除,我需要做些什么?

+0

用户关闭浏览器时无法做任何事情。当自上次会话交互后经过' 1'分钟时,会话将自行超时。 –

+0

@SotiriosDelimanolis我知道,但过了一段时间应该处理超时。当您之前登录时,sessionDestroyed从不会被调用,关闭浏览器并等待超时分钟。 sessionDestroyed仅在没有执行登录的会话上调用。 – confile

+0

检查BalusC的答案[这里](http://stackoverflow.com/questions/1945582/how-to-call-sessiondestroyed-when-a-session-times-out)。看起来,虽然会话可能会在一分钟后失效,但容器将不会调用'sessionDestroyed()'直到某个实现特定的时间间隔。 –

回答

0

以下是解决方案。即使你在你的web.xml中设置会话超时使用,Spring Security将覆盖当用户登录该值超时设置为:

session.maxInactiveInterval = -1 

所以,你必须为了使再覆盖该值会话超时工作。

相关问题