从我的应用程序视图中,我需要以编程方式注销当前用户并在此之后立即登录另一个用户。
我想将第二个用户登录到他自己的不同CHttpSession(使用另一个sessionID,依此类推)。出于安全考虑,我需要它。
如何在Yii框架中实现这一点?
以下代码
$ oSession->破坏(); $ oSession->打开();
无法正常工作..
答案 0 :(得分:5)
看起来你正试图impersonate users:
在您的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);
请记住保护此控制器的操作不受非授权用户的影响。
答案 1 :(得分:0)
一种可能的棘手方式(经过测试):
session_unset();
Yii::app()->user->id = $the_new_id;
执行上述代码时,页面上没有任何可见的内容,因此您可能需要重定向浏览器:
$this->redirect('somewhere');
下一页加载后,具有$ the_new_id的用户将被登录