2015-01-24 08:20:19 10121次浏览 4条回答 0 悬赏 1 金钱

每个页面有判断是否已经登录,去log查看,都有一句select * from user where id='1'的语句。
难道这个不是写在session吗?

  • 回答于 2015-01-27 23:26 举报

    你是不是弄错了,yii里面根本没有$app->user->isguest()这个方法,只有$app->user->isguest这个属性,这是个布尔值,用来判断当前用户是否登录的,怎么会去操作数据库呢?

  • 回答于 2015-01-28 18:05 举报

    这个属性是属性,但它是通过一个方法赋值的。
    如果登录后,从新刷新页面,这个属性会重新赋值,确实会重查一次数据库
    我想的话,如果要写入session,需要自已在登录后加入一个事件方法处理,然后登录前自已取回,但它要返回一个特定的数据对象,
    似乎很麻烦

  • 回答于 2015-01-31 10:54 举报

    可以看看源码是怎么处理的
    yii2\web\User.php
    第604行 protected function renewAuthStatus()
    这个方法里面

    $class = $this->identityClass;
    $identity = $class::findIdentity($id);
    

    这2行
    $class就是我们写的 app\models\User.php
    所以,你看看你自己写的这个User类里的findIdentity这个方法,是否查询了数据库
    下面是我写的方法,丢到了缓存里,就可以不用查数据库了

    public static function findIdentity($id) {
    	$userCache = new UserCache();
    	$userData = $userCache->getUserDataByUid($id);
    	if (empty($userData)) {
    		return null;
    	} else {
    		$arr = [];
    		$arr['id'] = $userData['user_id'];
    		$arr['username'] = $userData['user_name'];
    		$arr['authKey'] = $userData['user_authkey'];
    	
    		return new static($arr);
    	}
    }
    
  • 回答于 2015-02-04 23:14 举报

    在什么地方把结果丢到缓存呢,应该在登录成功以后吧
    上面当没有查询到结果时返回null好像不应该,
    直接缓存Identity对象好像还蛮好的,试了,可以

您需要登录后才可以回答。登录 | 立即注册
hq22
助理

hq22

注册时间:2014-02-12
最后登录:2015-01-31
在线时长:11小时2分
  • 粉丝0
  • 金钱1
  • 威望0
  • 积分111

热门问题