sessionDestroyed()关闭浏览器不执行为什么

来源:百度知道 编辑:UC知道 时间:2024/06/01 09:01:29
我实现用户在线显示功能
public class UserListener implements HttpSessionListener,HttpSessionAttributeListener {
private static List Ulist=new ArrayList();
public void sessionCreated(HttpSessionEvent se) {

System.out.println("new login user");
}
public void sessionDestroyed(HttpSessionEvent se) { // 如果session超时, 则从map中移除这个用户
try {
HttpSession session=se.getSession();
User u=(User)session.getAttribute("user");
for(int i=0;i<Ulist.size();i++){
User u1=(User)session.getAttribute("user");
if(u1.getName().equals(u.getName())){
Ulist.remove(i);
System.out.println("name="+u.getName()+"remove");
}
System.out.println("name="+u.getName());
}
logonUsers.remove(se.getSession());
} ca

浏览器关了session不会被destroyed,session被destroyed只有两个途径,一个是session过期,还有一个就是显式调用session.invalidate()方法。我们通常觉得关闭浏览器session就没了是因为session与当前浏览器绑定,通常的做法是将cookie生命期设为-1,如果浏览器关闭了cookie,一般的服务器都会使用url重写将session与当前的浏览器绑定,也就是我们常看见的在url后面跟着JSESSIONID=JKIPUjfijkdifjk##这样乱七八糟的东西。如果你想要关闭浏览器就将当前session销毁可以响应浏览器的关闭事件,然后向服务器提交将session销毁。