私のアプリケーションビューから、現在のユーザーをプログラムでログアウトし、その直後に別のユーザーにログインする必要があります。
2 番目のユーザーを別の CHttpSession (別のセッション ID など) にログインしたい。セキュリティ上の理由から必要です。
これを 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 を持つユーザーがログインします