思路(以限制同时在线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...