使用tomcat 7,servlet 3.0,spring mvc3 with 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方法不应该通知我吗?
答案 0 :(得分:0)
是的,会话在超时或者使用以下方式以编程方式到期时销毁:
HttpSession.invalidate()
请参阅此blog以确保您正确执行所有操作。
此外,servletcontainer不会在超时值之后立即销毁会话。有一个后台工作,以一定的时间间隔运行,如5~15分钟。因此,很可能因为这个原因你没有立即在控制台中看到被破坏的行。