我想要使用命令序列:
Yii::app()->user->setFlash('success', "Successful!");
Yii::app()->user->logout();
$this->redirect(array('user/login'));
用户已注销并重定向,但Setflash不起作用。 我也试图改变2个frist命令的顺序,但是遇到了同样的问题。 如果我不注销用户,Setflash工作正常。
如何使两个命令都有效?
答案 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执行注销的方式 - 虽然我不推荐它。