当前位置: 代码迷 >> Java Web开发 >> 关于非法退出如何避免
  详细解决方案

关于非法退出如何避免

热度:218   发布时间:2016-04-17 17:18:30.0
关于非法退出如何处理?
统计在线用户人数,用户一登陆,在线人数加一,注销时在线人数减一,如果用户直接把浏览器关了或者非法退出?
我如何才能知道?并且能够在他非法退出时,对应的在线人数减一,而不是用户已经退出了,在线人数却没有改变?
用了监听器来做处理,在sessionDestroyed方法定义:
Java code
public void sessionDestroyed(HttpSessionEvent event) {        HttpSession session = event.getSession();        ServletContext application = session.getServletContext();        // 取得登录的用户名        String username = (String) session.getAttribute("username");        List<String> users=(List) application.getAttribute("users");        users.remove(username);        System.out.println("非法退出,注销此用户:"+username);    }

在调用session.invalidate();会自动执行此方法,但如果我直接关闭浏览器,这个方法不会被执行!求救高手了!

------解决方案--------------------
你非要这么做也不是不可以

把session时间设置得非常非常短;例如10秒;
然后写一个js,用ajax在后台,定时(每2秒)刷一个心跳页面用来维持session的时效;

这样用户不管什么原因,只要那个页面关掉了,js脚本就不会被执行,没有心跳,10秒后自然就下线了

这样可以解决用户在这个页面但是很久不动作的情况

但是有对于管服务器还是客户端开销增加的弊端
------解决方案--------------------
刚没注意看,benjamin_liu 同学已经说的很清楚了;
不是不行,是有没有必要的问题,因为你要把请求-响应 模式改变成 实时模式,开销肯定很大;
  相关解决方案