0

我只是遇到了一个令人费解的情况。我的控制器操作如下所示:

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);
}

如果我使用在数据库中找不到的 $eventId 调用该函数,它会输出一条错误消息,并且用户会被重定向回所有事件的列表。但是,假设我选择了一个有效的 eventId,查看相关信息,然后按浏览器后退按钮,之前的 flash 消息再次输出,即使这种情况下的 URL 不包含 $eventId。

我想会发生什么是页面从浏览器缓存中加载而不是重新加载。我试图避免像这样将视图存储在缓存中:

<!--nocache-->
<?php echo $this->Session->flash(); ?>
<?php echo $this->Session->flash('auth'); ?>
<!--/nocache-->

但仍然会显示 Flash 消息。

知道如何防止这种行为吗?有没有办法在显示后清除闪光灯?

4

1 回答 1

2

您正在谈论正确的缓存,但尝试使用错误的缓存来修复它。

<!--nocache-->

是 php/html 文件本身中没有缓存语句。它与浏览器缓存无关。您需要做的是设置正确的标题。

对于这个确切的东西,请求对象中有一个方便的方法:http: //book.cakephp.org/2.0/en/controllers/request-response.html#interacting-with-browser-caching

我通过 AppController 在所有正常的前端操作中使用它:

public function beforeRender() {
    $this->response->disableCache();
    ...
}
于 2012-04-12T00:38:23.123 回答