【问题标题】:cache control not working缓存控制不起作用
【发布时间】:2011-05-08 20:11:07
【问题描述】:

我已经完成了一个登录脚本,并注意到即使在我注销后,我也可以返回并再次查看受保护的页面。这确实不是问题,因为用户无法造成任何损害,但我确实收到了大量我不喜欢的 javascript 错误。如果可能的话,我希望能够完全阻止客户端缓存。

我尝试了以下方法,但它不起作用,因为我仍然可以返回并查看缓存副本。这是我目前使用的。

    header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past

【问题讨论】:

    标签: php header http-headers


    【解决方案1】:

    你尝试过更全面的东西吗?

    Expires: Sat, 26 Jul 1997 05:00:00 GMT
    Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Pragma: no-cache
    

    来源:http://www.php.net/manual/en/function.session-cache-limiter.php

    【讨论】:

    • @kijin,我已经尝试过了,但除非我不理解某些内容,否则我仍然可以返回并查看受保护的页面。即使使用您的“综合”示例,它似乎仍在缓存结果。
    • 我还应该提到,如果我尝试使用 Chrome 返回,我将无法这样做。看来我不需要 Chrome 的任何标题功能。
    • @jim 除了 Chrome 之外,您还在哪些其他浏览器上进行测试?您是否尝试过清除浏览器的缓存?
    • 好吧,它在 Opera 中失败了。所有其他似乎都按预期工作。我也一直在寻找我能找到的任何东西,并提出了一些其他链接,表明 Opera 似乎忽略了无缓存请求。是不是没救了?
    • 您使用的是Opera Turbo 还是其他一些性能增强设置? Opera 可以根据其配置方式非常积极地缓存内容。 AFAIK 如果客户端配置为不刷新,则服务器不可能强制客户端刷新某些内容。
    【解决方案2】:

    我不确定这是否适用于整个页面,但值得一试。

    我们一遍又一遍地提供具有完全相同文件名的动态图像。显然,缓存这些图像会很糟糕,很糟糕,很糟糕(真的会彻底破坏我们的应用程序)。

    因此,我们将这三个标头发送到浏览器,并且完全消除了所有浏览器上的所有图像缓存,效果很好:

    //Prevent the image from caching, so it is created fresh each time.
    app.Response.AddHeader("pragma", "no-store,no-cache"); // //HTTP 1.0
    app.Response.AddHeader("cache-control", "no-cache, no-store, must-revalidate, max-age=-1"); // HTTP 1.1
    app.Response.AddHeader("expires", "Mon, 14 Jul 1789 12:30:00 GMT"); // Date in the past
    

    注意:我们测试了很多变体,但这是防止客户端图像缓存的神奇秘诀中的三个基本要素。您可能会成功地将这些用于整个页面,但我尚未测试过该特定场景。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-03
      • 2015-12-04
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      • 2017-02-25
      • 1970-01-01
      • 2022-11-10
      相关资源
      最近更新 更多