我正在开发网站,一些访问者的浏览器出现旧缓存。
有没有办法我们可以使用服务器端的代码甚至 javascript 清除访问者的浏览器缓存,这样他们就不必清除自己?
我找不到这个的直接答案。
大公司一定有一种方式,比如 Facebook、Ebay 等
我正在开发网站,一些访问者的浏览器出现旧缓存。
有没有办法我们可以使用服务器端的代码甚至 javascript 清除访问者的浏览器缓存,这样他们就不必清除自己?
我找不到这个的直接答案。
大公司一定有一种方式,比如 Facebook、Ebay 等
我们一直在使用 htaccess 来确定客户端的缓存规则。我们明确地赋予缓存 24 小时的生命周期,并在更新前一天设置无缓存规则。它有帮助,但它很乏味而且不那么可靠。
如果没有人回答,只是发布它来给你一些想法,但我也很想得到答案。:)
第一种方法:
您实际上可以在结束脚本之前保存页面的输出,然后在脚本开始时加载缓存。
示例代码:
<?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 访问它。
还要记住,如果你正在做一个完整的页面缓存,你的页面不应该有特定于会话的显示(例如显示成员的栏或什么),因为它们也会被缓存。查看特定缓存(变量或页面的一部分)的框架。
第二种方法:
使用 Squid 或正确更新 HTTP 标头来进行浏览器缓存。
PEAR 有一个缓存包(实际上是两个):
http://pear.php.net/package/Cache
第四种方法:
使用http://memcached.org/。该网站上有关于如何执行此操作的说明。
我通常使用多种技术组合:
/public/styles.f782bed8.css
)并使用 mod_rewrite 再次删除它。这样,文件中的每次更改都会产生一个新的文件名。这可以在 PHP 运行时在输出 HTML 标头时完成,使其完全自动化。但是,在这种情况下,MD5 可能会对性能产生影响。