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;
    }

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值