声明:本站文章均为作者个人原创,图片均为实际截图。如有需要请收藏网站,禁止转载,谢谢配合!!!

思路(以限制同时在线3个为例)

每当用户登录时,执行两个操作:(1)写入session(用户信息 + 随机字符串A)(2)判断redis的集合长度是否大于等于3,如果是,则弹出集合第一个元素,否则,继续第三步。(3)写入redis,利用集合(key:用户id,value:随机字符串A)

每当用户进入任意页面时候执行一个操作:判断session里的随机字符串是否在redis的集合(key为用户id)里面,如果不在,则清除当前登录用户的session信息,强制下线

1、用户登录

//生成随机字符串,作为此次登录信息的标识
$string = generarteRandomString();

$user['loginId'] = $string;

//(1)写入session(用户信息 + 随机字符串)
Session::put('user',$user);            

//(2)判断redis的集合长度是否大于等于3,如果是,则弹出集合第一个元素。
if(Redis::scard($key) >= 3 ){
    Redis::spop($key);
}

//(3)写入redis,利用集合
Redis::sadd('loginUser_'.$user['id'], $string);

2、进入任意页面

if(isLogin()){ //如果  
    if(!Redis::sismember('loginUser_'.$user['id'], $user['login_id']))){  //判断是否被踢
        \Session::forget('user');   //如果被踢,直接清除session,强制下线
    }
}
//continue...