如何以编程方式重新创建php yii会话?

时间:2012-10-15 16:37:14

标签: php session yii

从我的应用程序视图中,我需要以编程方式注销当前用户并在此之后立即登录另一个用户。

我想将第二个用户登录到他自己的不同CHttpSession(使用另一个sessionID,依此类推)。出于安全考虑,我需要它。

如何在Yii框架中实现这一点?

以下代码

$ oSession->破坏(); $ oSession->打开();

无法正常工作..

2 个答案:

答案 0 :(得分:5)

看起来你正试图impersonate users

  1. 在您的UserIdentity中创建一个函数,让您以另一个已知用户身份登录:

    protected function logInUser($user)
    {
        if($user)
        {
            $this->_user = $user;
            $this->_id=$this->_user->id;
            $this->setState('name', $this->_user->name);
            $this->errorCode=self::ERROR_NONE;
        }
    }
    
  2. 在您的控制器中,调用此函数以获取UserIdentity对象,然后使用Yii的CWebUser登录

    $ui = null;
    $user = User::model()->findByPk($userId);
    if($user)
    {   
        $ui = new UserIdentity($user->email, "");
        $ui->logInUser($user);
    }
    Yii::app()->user->login($ui, 0);
    
  3. 请记住保护此控制器的操作不受非授权用户的影响。

答案 1 :(得分:0)

一种可能的棘手方式(经过测试):

session_unset();
Yii::app()->user->id = $the_new_id;

执行上述代码时,页面上没有任何可见的内容,因此您可能需要重定向浏览器:

$this->redirect('somewhere');

下一页加载后,具有$ the_new_id的用户将被登录