从我的应用程序视图中,我需要以编程方式注销当前用户并在此之后立即登录另一个用户。
我想将第二个用户登录到他自己的不同 CHttpSession(使用另一个 sessionID 等等)。出于安全原因,我需要它。
如何在 Yii 框架中实现这一点?
下面的代码
$oSession->destroy(); $oSession->open();
没有按预期工作..
看起来您正在尝试冒充用户:
在您的 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;
}
}
在你的控制器中,调用这个函数来获取 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);
请记住保护此控制器的操作不受非授权用户的影响。
一种可能的棘手方法(经过测试):
session_unset();
Yii::app()->user->id = $the_new_id;
执行上述代码时,页面上没有任何可见的变化,因此您可能需要重定向浏览器:
$this->redirect('somewhere');
在下一页加载时,具有 $the_new_id 的用户将登录