laravel使用redis/set限制登录(同时在线数量)

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

猜你喜欢

转载自blog.csdn.net/sinat_37390744/article/details/112319080