2

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

我想将第二个用户登录到他自己的不同 CHttpSession(使用另一个 sessionID 等等)。出于安全原因,我需要它。

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

下面的代码

$oSession->destroy(); $oSession->open();

没有按预期工作..

4

2 回答 2

5

看起来您正在尝试冒充用户

  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);
    

请记住保护此控制器的操作不受非授权用户的影响。

于 2012-10-15T16:52:18.320 回答
1

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

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

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

$this->redirect('somewhere');

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

于 2012-10-15T19:10:01.520 回答