php 获取客户下线时间

客户下线,我查了很多资料,没有什么好解决的办法。

1,正常流程点击退出登陆。可以获取到下线时间。

2,关闭网页可以用js来获取关闭网页事件获取下线时间。

3,不正常套路,断线,pc端故障,断电,关闭浏览器。这个你怎么区分。

这个大家要是有更好的办法,请留下宝贵的意见。

我是用心跳来实现的,workman机制 有个心跳功能   

通过心跳每过多少秒发送一次ajax 请求 通过当前id 去存到redis  。

假设20秒存一次我先获取上次的存的时间戳跟现在的时间戳相比如果大于2分钟就为下线。从而存到redis  

 /**
     * 心跳检测
     * heartbeat
    */
    public function heartbeatOp() {
        $rulerid = $this->userinfo['rulerid']; 
        $key = $rulerid.'time';
        $time = time();
        $datetime = redis()->lrange($key, 0 ,0);
        //判断最后一次的时间是否大于120秒 
        if(bcsub($time,$datetime['0']) > 120) {
             $result = model('kefuLogin')->where(['server_uid' => $rulerid])->order('id desc')->find();
             $data = ['id' =>$result['id'], 'server_uid' => $rulerid, 'downtime' => $time+20];
             model('kefuLogin')->allowField(true)->isUpdate(true)->save($data);
        } else {
             $result =redis()->LPUSH($key,$time); 
        }
        return $result;
    }

但是这样还是获取不到最终时间,假设这个网站只有你自己。登陆的只有你自己,你一下线就这个方法不执行了好像所以还是直接存数据库比较好

猜你喜欢

转载自blog.csdn.net/joker6295/article/details/83215190