Firefox 在CakePHP中再次使用浏览器后退按钮触发flash消息

Firefox 在CakePHP中再次使用浏览器后退按钮触发flash消息,firefox,cakephp,google-chrome,cakephp-2.0,Firefox,Cakephp,Google Chrome,Cakephp 2.0,我只是遇到了一点令人困惑的情况。我的控制器操作如下所示: public function myaction($eventId = false) { if(!$eventId) { //list all events $data = foo; } else { if(!$this->Event->findById($eventId) ) { $this->Session->

我只是遇到了一点令人困惑的情况。我的控制器操作如下所示:

public function myaction($eventId = false) {
    if(!$eventId) {
        //list all events
        $data = foo;
    } else {
        if(!$this->Event->findById($eventId) )
        {
            $this->Session->setFlash('myerror message', 'flash_frontend_message');
            $this->redirect(array('controller' => 'events', 'action' => 'myaction'));
        } else {
            // display event information
            $data = foo;
        }
    }
    $this->set($data);
}
<!--nocache-->
<?php echo $this->Session->flash(); ?>
<?php echo $this->Session->flash('auth'); ?>
<!--/nocache-->
如果我使用数据库中找不到的$eventId调用函数,它将输出一条错误消息,用户将被重定向回所有事件的列表。但是,假设我选择了一个有效的eventId,查看相关信息,然后按browser back(浏览器返回)按钮,则上一条flash消息会再次发出,即使本例中的URL不包含$eventId

我想发生的情况是,页面从浏览器缓存加载,而不是重新加载。我已尝试避免将视图存储在缓存中,如下所示:

public function myaction($eventId = false) {
    if(!$eventId) {
        //list all events
        $data = foo;
    } else {
        if(!$this->Event->findById($eventId) )
        {
            $this->Session->setFlash('myerror message', 'flash_frontend_message');
            $this->redirect(array('controller' => 'events', 'action' => 'myaction'));
        } else {
            // display event information
            $data = foo;
        }
    }
    $this->set($data);
}
<!--nocache-->
<?php echo $this->Session->flash(); ?>
<?php echo $this->Session->flash('auth'); ?>
<!--/nocache-->

但仍然会显示flash消息

你知道如何防止这种行为吗?
是否有办法在闪存显示后清除它?

您说的是正确的缓存,但试图用错误的缓存修复它

<!--nocache-->

这看起来应该是可行的,但不。。。我在动作本身、控制器和AppController中尝试了三个不同的位置,但它仍然可以。更奇怪的是,即使从完全有效的请求返回时,Chrome似乎也会显示错误消息,即先查看事件列表,然后转到事件。您的apache/Htaces可能会覆盖其中一些头。尝试使用Firebug(Firefox ext)调试标题。然后你可能知道为什么你的浏览器会这样。就是这样。。。我在生产服务器上测试了这个设置,它运行正常。这种行为只发生在我的本地开发设置上。