思路(以限制同時線上3個為例)
每當使用者登入時,執行兩個操作:(1)寫入session(使用者資訊 + 随機字元串A)(2)判斷redis的集合長度是否大于等于3,如果是,則彈出集合第一個元素,否則,繼續第三步。(3)寫入redis,利用集合(key:使用者id,value:随機字元串A)
每當使用者進入任意頁面時候執行一個操作:判斷session裡的随機字元串是否在redis的集合(key為使用者id)裡面,如果不在,則清除目前登入使用者的session資訊,強制下線
//生成随機字元串,作為此次登入資訊的辨別
$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);
if(isLogin()){ //如果
if(!Redis::sismember('loginUser_'.$user['id'], $user['login_id']))){ //判斷是否被踢
\Session::forget('user'); //如果被踢,直接清除session,強制下線
}
}
//continue...