从我的应用程序视图中,我需要以编程方式注销当前用户并在此之后登录另一个用户。如何以编程方式重新创建php yii会话?
我想登录第二个用户到他自己的不同CHttpSession(与另一个sessionID等)。我出于安全原因需要它。
如何在Yii框架中实现这个?
下面的代码
$ oSession-> destroy(); $ oSession-> open();
不能按预期工作..
从我的应用程序视图中,我需要以编程方式注销当前用户并在此之后登录另一个用户。如何以编程方式重新创建php yii会话?
我想登录第二个用户到他自己的不同CHttpSession(与另一个sessionID等)。我出于安全原因需要它。
如何在Yii框架中实现这个?
下面的代码
$ oSession-> destroy(); $ oSession-> open();
不能按预期工作..
貌似你试图impersonate users:
创建您的UserIdentity功能,将alow您登录另一个已知用户:
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的用户将被登录
重新创建会话必须在任何输出到客户端之前。如果你创建会话,输出一些数据 - 重建会话将无法正常工作。在输出一些数据之后,您必须创建会话,删除会话并重新创建会话。或者你必须使用缓冲输出 – Sergey