3

我想使用命令序列:

Yii::app()->user->setFlash('success', "Successful!");
Yii::app()->user->logout();
$this->redirect(array('user/login'));

用户已注销并重定向,但 Setflash 不起作用。我还尝试更改 2 个第一个命令的顺序,但遇到了同样的问题。如果我不注销用户,Setflash 工作正常。

如何使这两个命令都起作用?

4

3 回答 3

6

这应该工作

Yii::app()->user->logout();
Yii::app()->session->open();
Yii::app()->user->setFlash(...);

如果你需要销毁整个会话,但你想在之后设置一个 flash,你可以这样扩展 CWebUser:

<?php

class BaseWebUser extends CWebUser
{

        public function logout($destroySession = true)
        {
                parent::logout($destroySession);
                Yii::app()->session->open();
        }

}

?>

仔细看看这里

于 2013-05-17T22:37:47.577 回答
1

我认为你可以使用这个:

public function afterLogout() {
    // Create new session
    $session=new CHttpSession;
    $session->open();

    // Set flash message
    Yii::app()->user->setFlash('success', 'You are logged out successfully.');

    // Prepare target URL after logout
    $continue_url = Yii::app()->request->hostInfo . Yii::app()->createUrl('');

    // Redirect
    CController::redirect($continue_url);
}

将它放在您的 WebUser 组件中。

于 2013-03-23T14:33:25.867 回答
0

Flash 消息存储在会话中。记录用户我们会破坏用户的当前会话。调用 session_destroy() 后,您必须再次调用 session_start() 以生成新的会话 ID 并进行此工作。Yii 很可能不会那样做。

如果您有一个“成功”消息表明注销工作非常重要 - 然后将用户重定向到“注销成功”页面。或者,您可以考虑覆盖 Yii 执行注销的方式 - 尽管我不推荐它。

于 2012-11-13T14:45:22.377 回答