2012-10-15 55 views
2

从我的应用程序视图中,我需要以编程方式注销当前用户并在此之后登录另一个用户。如何以编程方式重新创建php yii会话?

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

如何在Yii框架中实现这个?

下面的代码

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

不能按预期工作..

+0

重新创建会话必须在任何输出到客户端之前。如果你创建会话,输出一些数据 - 重建会话将无法正常工作。在输出一些数据之后,您必须创建会话,删除会话并重新创建会话。或者你必须使用缓冲输出 – Sergey

回答

5

貌似你试图impersonate users

  1. 创建您的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; 
        } 
    } 
    
  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); 
    

记住要保护这个控制器的动作从非授权用户。

+0

这正是我所期待的! –

0

一种可能取巧的办法(测试):

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

在执行上面的代码,没有任何可见的发生在网页上,所以你可能需要将浏览器重定向:

$this->redirect('somewhere'); 

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