在访问者开发后清除缓存

时间:2012-10-12 08:35:59

标签: php javascript caching

我正在开发网站,而某些访问者的浏览器会显示旧缓存。

有没有办法可以使用服务器端的代码甚至是javascript清除访问者的浏览器缓存,这样他们就不必自行清理了?

我无法找到对此的直接答案。

大公司必须有像Facebook,Ebay等那样的方式

3 个答案:

答案 0 :(得分:2)

我们一直在使用htaccess来确定客户端的缓存规则。我们明确地给缓存提供了24小时的生命周期,并且在我们进行更新之前的一天我们放置了无缓存规则。它有所帮助,但它很乏味,而且不那么可靠。

如果没有人回答,只是张贴它给你的想法,但我真的很想得到答案。 :)

答案 1 :(得分:1)

第一种方法:

在结束脚本之前,您实际上可以保存页面的输出,然后在脚本的开头加载缓存。

示例代码:

<?php

$cachefile = 'cache/'.basename($_SERVER['PHP_SELF']).'.cache'; // e.g. cache/index.php.cache
$cachetime = 3600; // time to cache in seconds

if(file_exists($cachefile) && time()-$cachetime <= filemtime($cachefile)){
  $c = @file_get_contents($cf);
  echo $c;
  exit;
}else{
  unlink($cachefile);
}

ob_start();

// all the coding goes here

$c = ob_get_contents();
file_put_contents($cachefile);

?>

在结束脚本之前,您实际上可以保存页面的输出,然后在脚本的开头加载缓存。

示例代码:

   

如果你有很多需要这种缓存的页面,你可以这样做:

在cachestart.php中:

 

在cacheend.php中:

<?php

$c = ob_get_contents();
file_put_contents($cachefile);

?>

然后只需添加

即可

包括( 'cachestart.php'); 在脚本的开头。并添加

包括( 'cacheend.php'); 在脚本的最后。记住要有一个名为cache的文件夹,并允许PHP访问它。

另外请记住,如果您正在进行整页缓存,则您的页面不应具有特定于SESSION的显示(例如,显示成员的栏或内容),因为它们也将被缓存。查看特定缓存的框架(变量或页面的一部分)。

第二种方法:

使用Squid或正确更新HTTP标头以进行浏览器缓存。

PEAR有一个缓存包(实际上是两个):

http://pear.php.net/package/Cache

第四种方法:

使用http://memcached.org/。有关如何在该网站上进行此操作的说明。

答案 2 :(得分:0)

我通常使用多种技术组合:

  • PHP代码生成的HTML不会使用标准配置进行缓存,因为它会自动发送相应的标头。
  • 如果图像和其他二进制资产发生变化,则会重命名。
  • 对于JavaScript和CSS,我将自动创建的唯一代码(例如内容的MD5哈希值或文件大小)添加到文件名(例如/public/styles.f782bed8.css)并使用mod_rewrite再次删除它。这样,文件中的每个更改都会生成一个新文件名。这可以在运行时在PHP中完成,同时输出HTML标头,使其完全自动化。但在这种情况下,MD5可能会对性能产生影响。