如何正确处理?http://yiiframework.ru/doc/guide/en/topics.auth在基于Cookie的登录部分中说,将重要信息存储在Cookie中是不好的。我也这么认为。他们建议做以下事情:
当用户通过填写登录表单成功登录时,我们在cookie状态和服务器端的持久存储(例如数据库)。在请求,当通过cookie进行用户身份验证时信息,我们比较这个随机密钥的两个副本,并确保在登录用户之前进行匹配。如果用户通过登录表单中,需要重新生成密钥。
我同意。但是如何实现呢?我必须在哪里编写代码来检查cookie并恢复会话?有什么帮手吗?或者它必须是控制器的beforeEnd()函数?有教程吗?谢谢
身份验证可以使用会话或cookie来实现。
要启用基于cookie的身份验证,请设置用户组件的allowAutoLogin
属性。
在protected/config/main.php中
'components'=>array(
'user'=>array(
// enable cookie-based authentication
'allowAutoLogin'=>true,
'loginUrl'=>'site/login',
'class' => "UserIdentity",
),
对用户凭据进行身份验证时。设置cookie有效期,例如:
Yii::app()->user->login($identity,3600*24*7);//记住我周
编辑
您可以使用setSate
存储附加信息
$this->setState('myhash', $myhash);
这将存储在会话或cookie中,具体取决于您的配置值。您可以同时使用这两种功能。
若要将值强制输入会话,请使用全局会话对象。
Yii::app()->session['hash'] = $hash;
将值强制输入cookie
Yii::app()->request->cookies['hash'] = new CHttpCookie('hash', $hash);
答案如下:http://www.yiiframework.com/wiki/741/enhance-security-of-cookie-based-login/
我要补充的是,你必须在参数中指定你高估了CWebUser
:
'user' => array(
'class' => 'WebUser',
......
另一件重要的事情是,如果没有指定Yii::app()->user->login()
第二个参数(cookie生存期),则不会设置会话cookie。