微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – Laravel 4应用程序中的浏览器缓存问题

我遇到了浏览器缓存干扰我的Laravel应用程序的问题.

如果禁用浏览器缓存,一切正常.但是,如果启用,并且重复单击相同的链接,则甚至不会执行用于创建视图或收集数据的Laravel方法.

其影响是多方面的.例如,编辑资源的表单或显示数据的网格(使用ajax从服务器加载)在重新加载浏览器之前不会显示当前值.

我在我的一些方法添加了一行记录当前时间戳以证明这一点.

public function index()
{
    Log::info( microtime() );

    return View::make( $this->templates_root . 'index' );
}

当重复单击链接或再次访问视图时,日志中不会显示任何行.但是如果我重新加载浏览器就会这样.

我该怎么做才能阻止浏览器缓存我的观点?

解决方法:

编辑:

惊喜,惊喜 – 之前的解决方案在IE中无效.

花了几个小时后,我最终将以下内容添加到刀片模板标题中:

<Meta http-equiv="cache-control" content="max-age=0" />
<Meta http-equiv="cache-control" content="no-cache" />
<Meta http-equiv="cache-control" content="no-store" />
<Meta http-equiv="cache-control" content="must-revalidate" />
<Meta http-equiv="expires" content="0" />
<Meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
<Meta http-equiv="pragma" content="no-cache" />

这似乎适用于所有浏览器.

此外,我不得不阻止所有AJAX调用的缓存. This question提供了一些非常有用的答案.

以下在IE中不起作用:

我找到了一个解决方案 – 在我看来并不是一个漂亮的解决方案.

使用(全局后)过滤器如下…

App::after(function($request, $response)
{
    // prevent browser caching
    $response->headers->set('Cache-Control','nocache, no-store, max-age=0, must-revalidate');
    $response->headers->set('Pragma','no-cache');
    $response->headers->set('Expires','Fri, 01 Jan 1990 00:00:00 GMT');
});

似乎强迫浏览器从服务器重新加载页面.

this question的答案提供了一些非常有用的信息.

但是,我仍然想知道为什么其他开发人员没有相同的问题,或者他们有没有,他们如何解决它.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐