我想使用命令序列:
Yii::app()->user->setFlash('success', "Successful!");
Yii::app()->user->logout();
$this->redirect(array('user/login'));
用户已注销并重定向,但 Setflash 不起作用。我还尝试更改 2 个第一个命令的顺序,但遇到了同样的问题。如果我不注销用户,Setflash 工作正常。
如何使这两个命令都起作用?
这应该工作
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();
}
}
?>
仔细看看这里
我认为你可以使用这个:
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 组件中。
Flash 消息存储在会话中。记录用户我们会破坏用户的当前会话。调用 session_destroy() 后,您必须再次调用 session_start() 以生成新的会话 ID 并进行此工作。Yii 很可能不会那样做。
如果您有一个“成功”消息表明注销工作非常重要 - 然后将用户重定向到“注销成功”页面。或者,您可以考虑覆盖 Yii 执行注销的方式 - 尽管我不推荐它。