TP5 - 唯一登录在重新请求时踢用户下线
2019-03-18 本文已影响0人
NO我的错
在登录的时候把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;
}
}