天天看點

laravel使用redis/set限制登入(同時線上數量)

思路(以限制同時線上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...