【发布时间】:2009-04-01 15:59:41
【问题描述】:
我有以下 HttpSessionlistener 的实现
public class SessionListener implements HttpSessionAttributeListener, HttpSessionListener {
public void attributeAdded(HttpSessionBindingEvent event) {
...
}
public void attributeRemoved(HttpSessionBindingEvent event) {
...
}
public void attributeReplaced(HttpSessionBindingEvent event) {
}
//HttpSesion creation & destruction
public void sessionCreated(HttpSessionEvent event) {
HttpSession session = event.getSession();
//log created time
}
public void sessionDestroyed(HttpSessionEvent event) {
HttpSession session = event.getSession();
long destroyedTime = System.currentTimeMillis();
//log destroyed time
}
}
基本上我会记录会话的创建和销毁时间。 但是如果会话很长(默认为 30 分钟),并且用户同时关闭了浏览器,则
sessionDestroyed
没有被调用?
这是为什么呢? 是否有一种解决方法可以准确记录会话被销毁的时间(当用户关闭浏览器时)?这不应该是浏览器的问题,在会话关闭时终止会话吗?
有没有我必须实现的接口才能让它工作?
谢谢!
【问题讨论】:
-
我 100% 确定至少在 2016 年这是可能的。许多网站都会这样做,一旦您关闭 Google Chrome 中的标签,它们就会关闭会话!