【问题标题】:Is there a way to disable browser cache for a single page?有没有办法禁用单个页面的浏览器缓存?
【发布时间】:2010-12-01 13:12:19
【问题描述】:

对于一个小型 Intranet 站点,我有一个被 Firefox 错误缓存的动态(包括 AJAX)页面。有没有办法禁用单个页面的浏览器缓存?

这是我正在使用的设置:

  • XAMPP 下的 Apache,在 Windows 服务器上运行
  • PHP

澄清

我主要关心的内容是页面文本和一些<select>s 中的默认选项。因此,例如,我不能只在某些图像 URL 的末尾添加随机数。

更新:

我遵循了迄今为止得到的建议:

  • 我正在发送 nocache 标头(见下文)
  • 如果页面在 2 秒后重新加载,我将包含时间戳 URL 参数并重定向到新的参数,如下所示:

    $timestamp = $_GET['timestamp'];
    if ((time()-$timestamp) > 2) {
        header('Location:/intranet/admin/manage_skus.php?timestamp='.time());
    }
    

现在 Firebug 显示标头未指定缓存,但问题仍然存在。以下是页面的响应标头:

Date    Fri, 25 Sep 2009 20:41:43 GMT
Server  Apache/2.2.11 (Win32) DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8i mod_autoindex_color PHP/5.2.8
X-Powered-By    PHP/5.2.8
Expires Mon, 20 Dec 1998 01:00:00 GMT
Last-Modified   Fri, 25 Sep 2009 20:41:43 GMT
Cache-Control   no-cache, must-revalidate
Pragma  no-cache
Keep-Alive  timeout=5, max=100
Connection  Keep-Alive
Transfer-Encoding   chunked
Content-Type    text/html

【问题讨论】:

  • 你怎么知道它被错误地缓存了?
  • @Martin - 我不是 100% 确定,但是重新加载会使它显示错误,而 Ctr+F5 重新加载(清除缓存)可以修复它。在重新加载之前,我使用 Ajax 根据用户输入向表(和数据库)添加行。我将它们放在顶部并使用高亮效果来明确发生了什么。重新加载后,这些相同的行应该在表中,但根据 MySQL 查询进行排序。此时,Firefox 并没有将正确的数据与正确的行关联起来,就好像它使用了前一个行顺序中的一些信息一样。
  • OK - 进一步说明:所有显示不正确的是每行

标签: php apache caching xampp


【解决方案1】:

添加当前时间戳作为url的参数,例如

http://server.com/index.php?timestamp=125656789

【讨论】:

  • 这是最好的答案,因为旧版浏览器(我在看你的 IE)在某些情况下不遵循 no-cache 标头。
  • 在链接上这样做?定期页面刷新呢?
  • 如果参数传递的时间戳太旧,将浏览器重定向到新的时间戳。
【解决方案2】:

我想这告诉你你想要什么:

http://www.thesitewizard.com/archive/phptutorial2.shtml

寻找“防止浏览器缓存”

header( "Expires: Mon, 20 Dec 1998 01:00:00 GMT" );
header( "Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT" );
header( "Cache-Control: no-cache, must-revalidate" );
header( "Pragma: no-cache" );

【讨论】:

  • 谢谢。不过,到目前为止没有任何变化。我编辑了我的问题以显示我得到的响应标题。
【解决方案3】:

您应该发送以下标头:

Cache-control: no-cache

在 HTTP 响应中。

【讨论】:

  • 我这样做了,使用 Craig Treptow 的代码建议,但没有骰子。我编辑了问题以显示标题。
【解决方案4】:

您可以添加这些标题:

Cache-Control: no-cache

并且(为了向后兼容 HTTP/1.0 客户端)

Pragma: no-cache

【讨论】:

    【解决方案5】:

    这是另一种非 PHP 特有的方法。

    在您的 <head> </head> 部分试试这个:

    <meta http-equiv="cache-control" content="no-cache, no store"/>
    <meta http-equiv="Expires" Content="Mon, 25 May 2009 19:07:03 GMT">
    

    在这里发现一个长线程的结尾:

    http://forums.mozillazine.org/viewtopic.php?f=25&t=673135&start=75

    【讨论】:

      【解决方案6】:

      使用 header() 函数。您必须设置一些以覆盖所有浏览器;见http://www.php.net/manual/en/function.header.php#75507

      【讨论】:

        猜你喜欢
        • 2016-09-22
        • 1970-01-01
        • 1970-01-01
        • 2017-06-14
        • 2010-10-29
        • 1970-01-01
        • 2016-01-22
        • 2013-08-13
        • 2014-09-16
        相关资源
        最近更新 更多