Yii基于cookie的登录


Yii cookie based login

如何正确处理?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。