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