我在HttpSessionListener
中注册了web.xml
已实施的类,当应用程序启动时,sessionCreated()
方法被调用两次。当我从应用程序注销时,sessionDestroyed()
正在调用,然后再次sessionCreated()
正在调用。为什么会这样?
public class SessionManager implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
System.out.println("Session Creation called!!..");
}
@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
System.out.println("Session Destruction called!!..");
}
}
输出:
当应用程序启动时,它会打印"会话创建名为!! .."两次。当我退出时,它首先打印为"会话销毁称为!! .."第二次作为"会话创建被称为!! .."。
答案 0 :(得分:1)
成功登录应用程序后,在创建新的经过身份验证的会话之前,将销毁旧的匿名会话。注销时也会出现类似的情况,当首次销毁经过身份验证的会话时,会创建一个新的匿名。这与您描述的方案一致。
要验证正在创建和销毁哪些确切的会话,请将日志记录改进为还包括会话ID。例如:
public class SessionManager implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
System.out.println("session created: " + httpSessionEvent.getSession().getId());
}
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
System.out.println("session destroyed: " + httpSessionEvent.getSession().getId());
}
}