0

使用tomcat 7、servlet 3.0、spring mvc3和spring social,我让我的班级听课;

public class AClass implements ApplicationContextAware, HttpSessionListener{

...
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            this.applicationContext = applicationContext;
            if (applicationContext instanceof WebApplicationContext) {
                ((WebApplicationContext) applicationContext).getServletContext().addListener(this);
    }

    public void sessionCreated(HttpSessionEvent se) {
        System.out.println("session created");
    }

    public void sessionDestroyed(HttpSessionEvent se){
        System.out.println("session destroyed");

    }
...
}

我在 web.xml 中将会话超时设置为 1 分钟(我确信它工作正常)当我打开一个页面时,我收到“会话已创建”消息,但我从未收到“会话已被破坏”。如果我在 1 分钟后刷新页面,我会再次收到“会话已创建”消息,该消息声称该会话即将过期。

所以问题是我做错了什么?sessionDestroyed 方法不应该在会话过期时通知我吗?

4

1 回答 1

0

是的,当会话超时或您以编程方式使用以下命令将其过期时,会话将被销毁:

HttpSession.invalidate()

请参阅此博客以确保您正确执行所有操作。

此外,servletcontainer 不会在超时值之后立即销毁会话。有一个后台作业以特定的时间间隔运行,例如 5~15 分钟。因此,由于这个原因,您很可能不会立即在控制台中看到被破坏的行。

于 2013-01-17T21:23:00.757 回答