基于Yii cookie的登录

时间:2013-11-29 17:29:09

标签: php authentication cookies yii

如何正确处理?基于Cookie的登录部分中的http://yiiframework.ru/doc/guide/en/topics.auth表示将重要信息存储在Cookie中并不好。我也是这么认为的。他们建议做以下事情:

  

当用户通过填写​​登录表单成功登录时,我们   生成并存储cookie状态和in中的随机密钥   服务器端的持久存储(例如数据库)。随后   请求,当通过cookie完成用户身份验证时   信息,我们比较这个随机密钥的两个副本,并确保一个   登录用户之前匹配。如果用户通过登录登录   再次形成,关键需要重新生成。

我同意。但是如何实现呢?我必须编写代码来检查cookie并恢复会话?任何一种帮手还是什么?或者它必须是控制器的beforeRender()函数?有没有教程?谢谢!

2 个答案:

答案 0 :(得分:3)

可以使用会话或cookie实现身份验证。

要启用基于cookie的身份验证,请设置用户组件的allowAutoLogin属性。

protected / config / main.php

'components'=>array(
    'user'=>array(
        // enable cookie-based authentication
        'allowAutoLogin'=>true,
        'loginUrl'=>'site/login',
        'class' => "UserIdentity",
    ),

验证用户凭据时。设置cookie有效期,例如:

  

的Yii ::应用程序() - >用户>登录($身份,3600 * 24 * 7); //记得我一个   周

修改

您可以使用setSate

存储其他信息
$this->setState('myhash', $myhash);

这将存储在会话或cookie中,具体取决于您的配置值。你可以同时使用它们。

要强制将值放入会话,请使用全局会话对象。

Yii::app()->session['hash'] = $hash;

强制将值转换为Cookie

Yii::app()->request->cookies['hash'] = new CHttpCookie('hash', $hash);

答案 1 :(得分:1)

答案在这里: http://www.yiiframework.com/wiki/741/enhance-security-of-cookie-based-login/

我要补充一点,你必须在params中指明你覆盖了CWebUser

'user' => array(
    'class'  => 'WebUser',
    ......

另一个重要的事情是,如果未指定Yii::app()->user->login()第二个参数(cookie生存期),则不会设置会话cookie。