【用户在线统计】如何处理浏览器关闭时候的session清理问题

来源:互联网 发布:js中获取父节点 编辑:程序博客网 时间:2024/05/17 03:51

在线用户统计是用HttpSessionBindingListener实现的,将实例化的类放到session对象中,

request.getSession().setAttribute("onlineUserListener", onlineUserListener);

HttpSessionBindingListener内有两个方法valueBound(HttpSessionBindingEvent event)和valueUnbound(HttpSessionBindingEvent event),前者为数据绑定,后者为取消绑定。在创建和销毁session的时候,分别调用。

问题在于,正常的退出,是可以将session销毁从而进入valueUnbound方法进行逻辑处理的,但是如果直接关闭浏览器,就无法得到session的销毁事件,没有办法进行记录。


最早使用的是window.unonload方法,在页面关闭时候可以在这个方法中调用一个action,在action中将session置为无效。但是这种实现最大的问题是,页面刷新unonload方法一样会调用,会造成session无效的重新登录。

如何能够判断unonload方法的调用是刷新还是关闭,可以分辨何时调用session无效的请求。

利用onbeforeunload ,是在onunload前触发的事件,在全局添加变量,在触发onbeforeunload记录时间,根据时间差来判断是关闭还是刷新。

var _beforeUnload_time = 0, _gap_time = 0;

    window.onunload = function (){
        _gap_time = new Date().getTime() - _beforeUnload_time;
        // console.log(_gap_time);
        if(_gap_time <= 5)
         page_unload()
    };
    window.onbeforeunload = function (){
        _beforeUnload_time = new Date().getTime();
    };

阅读全文
0 0
原创粉丝点击