TP5 - 唯一登录在重新请求时踢用户下线

在登录的时候把session_id保存到redis一个数组中
login.php

                //登录后获取用户id,如id=1
                $uid = 1;
                //创建一个唯一id数组作为唯一登录检测,如果没有此redis值就创建一个数组
                if(!cache('sessionIds')){
                    //创建一个数组,将id作为key把session_id作为值存到redis
                    $sessionIds = [];
                    $sessionIds[$uid] = session_id();
                    cache('sessionIds',$sessionIds);
                }else{
                    //找到登录id 对应的session_id值并改变这个值
                    $sessionIds = cache('sessionIds');
                    $sessionIds[$uid] = session_id();
                    cache('sessionIds',$sessionIds);
                }

在构造函数中写入检查方法
Index.php

//构造函数中
public function _initialize(){
      //用户处于登录状态时
      if(session('userinfo')){
            //登录状态检测用户是否在其他地方登录
            if(!$this->onlyLoginCheck()){
                session('userinfo',NULL);
                exit('您的账号已在其他设备登录');
            }
        }
}
//检查唯一登录
protected function onlyLoginCheck(){
        $sessionIds = cache('sessionIds');
        $id = session('userinfo.us_id');
        //存入的session_id和登录的session_id相等则返回true
        if($sessionIds[$id] == session_id()){
            return true;
        }else{
            return false;
        }
}

你可能感兴趣的:(TP5 - 唯一登录在重新请求时踢用户下线)