我正在开发网站,而某些访问者的浏览器会显示旧缓存。
有没有办法可以使用服务器端的代码甚至是javascript清除访问者的浏览器缓存,这样他们就不必自行清理了?
我无法找到对此的直接答案。
大公司必须有像Facebook,Ebay等那样的方式
答案 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)
我通常使用多种技术组合:
/public/styles.f782bed8.css
)并使用mod_rewrite再次删除它。这样,文件中的每个更改都会生成一个新文件名。这可以在运行时在PHP中完成,同时输出HTML标头,使其完全自动化。但在这种情况下,MD5可能会对性能产生影响。