YII中利用redis实现账号的唯一登录

yii中利用redis实现账号唯一登录的思路:

1、在账号登录的时候生成一个唯一token,并且这个唯一token的值可以指向每个用户的唯一id(用户可以做个简单的加密处理比如base64_encode('user_'.$token)或者用md5加密)

$token = uniqid('')
Yii
::$app->redis->setex(md5($token), 1800, base64_encode('uid_'.userid)); //设置唯一token的指向
//在redis中再起一个hash字段,并且把一些信息设置进去,注意,里面要设置一个token字段以备做验证,值对应上面的token
Yii::$app->redis->hmset(base64_encode('uid_'.userid), 'username', '用户名', 'otherinfo', '其他信息', 'token', md5($token))

2、用户在登录的时候,把上面未加密的token返回给用户

3、用户登录的时候,需要对上传的token字段进行验证

$token = md5($token)  //后面这个token是用户夹带上来的token,可以放在请求头里

if(Yii::$app->redis->exists($token)) {

    $authToken = Yii::$app->redis->hget(Yii::$app->redis->get($token), 'token');

    if($authToken && $token == $authToken) {   //判断所对应的token是否是一致的
        
        //如果是一致的,说明本次是唯一登录
        Yii::$app->redis->expire($token, 1800);  //重新更新过期时间

    }  else {
    
        //说明账号已经在其他地方登录,这个时候可以做些重登录的处理,比如把对方的账号挤下来

    }

}
原文地址:https://www.cnblogs.com/rickyctbu/p/13023168.html