2014-07-21 162 views
1

我写一个脚本,修改自己的内容和我有防止其缓存本身不显示更新后的页面很难......防止缓存在浏览器

我已经试过所有我能想到的...... 我添加这些报头中的PHP代码:

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> 
<meta http-equiv="Pragma" content="no-cache" /> 
<meta http-equiv="Expires" content="0" /> 

我甚至加入一个.htaccess网络连接:

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past 
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modified 
header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1 
header("Cache-Control: post-check=0, pre-check=0", false); 
header("Pragma: no-cache"); // HTTP/1.0 
header('Expires: 0'); // Proxies. 

我在HTML代码中添加了这些元标签le与此在它:

Options -Indexes 
<IfModule mod_headers.c> 
Header set Cache-Control "no-cache, no-store, must-revalidate" 
Header set Pragma "no-cache" 
Header set Expires 0 
</IfModule> 

...然而浏览器一直在缓存它...有什么我可以做吗?

感谢

+0

您能显示包含脚本的片段吗?它如何修改自己? – kevinAlbs

+0

在一天结束时,浏览器可能只是做任何它感觉像做的事 - 无论你告诉它做什么。 –

回答

0

使用的.htaccess是罚款,甚至更好,如果你有机会获得httpd.conf文件。无论哪种方式,这是正确的。但是,您也可以操纵每个脚本的基础上,浏览器缓存,就像这样:

<?php 
header("Last-Modified: " . <whatever date you want refreshing>)); 
header("Expires: " . <whatever date you want refreshing>)); 
header("Cache-Control: max-age=<whatever date ..>); 
?> 
<!doctype html> 
<html lang="en"> 
<head> 
... 
+0

这是我正在做的一部分,正如我在我的原始文章 – marcnyc

0

你有没有在更改文件后清除缓存?我知道我之前曾经与这个角色搏斗过,这是由于一个简单的因素,我没有在做出更改后清除我的缓存。无论如何,你把所有东西放在顶端。

+0

中提到的那样我正在尝试对我的脚本进行编程,以便我不必每次都清空缓存,以便它在没有人为干预的情况下工作排序... – marcnyc

0

大多数网络浏览器都会根据Last-Modified来缓存一些东西。有几个技巧,可以随时告诉浏览器更新可能被缓存的文件(S):

使用touch您可以更新文件的时间戳:

<?php 

$time = time() + 60; // Time Now + One Minute 
$file = '/path/to/your/file/'; 
touch($file, $time); 

    if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) 
      && 
     (strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == filemtime($file))) { 
     // Send Result To Client 
     header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($file)).' GMT', 
     true, 304); 
     exit; 
    } 
?> 

这将更新时间戳在页面加载时+1分钟的文件上 - 然后将它与客户端本地缓存的版本进行比较。如果您不更新文件时间戳,您也可以使用$time变量,而不是filemtime($file)

+0

这是一个有趣的解决方案,我不知道,但由于有几个例程,写几个文件,我正在寻找一个更一般的和所有可以应用的解决方案......我想知道是否有... – marcnyc

+0

您将获得全方位解决方案的唯一方法是清除客户端的缓存。您可以随时将需要更新的文件名添加到数组中,然后“触摸”时间戳,以便同时更新它们。 –

+0

,因为此方法依赖于向客户端发送标题('Last-Modifie:...'),这与发送已发送的所有已过期日期的标题有何不同/更好,因此应该声称强制重新加载? – marcnyc

相关问题