Yii setFlash with Logout

时间:2012-11-13 14:42:18

标签: php yii

我想要使用命令序列:

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

用户已注销并重定向,但Setflash不起作用。 我也试图改变2个frist命令的顺序,但是遇到了同样的问题。 如果我不注销用户,Setflash工作正常。

如何使两个命令都有效?

3 个答案:

答案 0 :(得分:6)

这应该有效

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

如果您需要销毁整个会话但之后想要设置闪存,则可以通过以下方式扩展CWebUser:

<?php

class BaseWebUser extends CWebUser
{

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

}

?>

仔细查看here

答案 1 :(得分: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组件中。

答案 2 :(得分:0)

Flash消息存储在会话中。记录用户我们会破坏用户的当前会话。调用session_destroy()后,必须再次调用session_start()才能生成新的会话ID并使其正常工作。 Yii很可能不这样做。

如果您有一条“成功”消息表明注销有效,那么重要的是将用户重定向到“注销成功”页面。或者,你可以考虑覆盖Yii执行注销的方式 - 虽然我不推荐它。