最近做Yii2
自动登录功能,发现即使开启了Yii2
的自动登录配置功能,浏览器关闭后,再次打开浏览器还是处于非登录状态。
网上查询资料基本没有相同情况。
查询登录源码:
protected function sendIdentityCOOKIE($identity, $duration)
{$COOKIE = new COOKIE($this->identityCOOKIE);$COOKIE->value = json_encode([$identity->getId(),$identity->getAuthKey(),$duration,], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);$COOKIE->expire = time() + $duration;Yii::$app->getResponse()->getCOOKIEs()->add($COOKIE);
}
打印COOKIE
变量发现内容没有任何问题。去其他控制器执行也是毫无问题。
查看浏览器,Yii2
设置的sessionID
也是正常的,也就是COOKIE只是这里设置不成功。
既然,系统没问题,浏览器没问题,那么就是传输过程有问题。
后来终于发现:原来在调用$model->login()
登录方法过后,我直接输出json
数据到浏览器,并且在后面有exit
方法,直接阻止了控制器继续执行。
所以,yii2
执行到exit
处就完了,导致头信息header
也没有被传输到浏览器。所以浏览器根本没有收到php
设置COOKIE
的命令。
总结:Yii2
登录或者需要设置COOKIE
的控制器,千万不要exit or die
,直接使用if else
去判断,不要打断执行。