even

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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 {
    
        //说明账号已经在其他地方登录,这个时候可以做些重登录的处理,比如把对方的账号挤下来

    }

}

 

posted on 2020-06-01 08:01  even_blogs  阅读(454)  评论(0编辑  收藏  举报