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

在线用户统计是用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();
    };

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值