5

我正在开发网站,一些访问者的浏览器出现旧缓存。

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

我找不到这个的直接答案。

大公司一定有一种方式,比如 Facebook、Ebay 等

4

3 回答 3

2

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

如果没有人回答,只是发布它来给你一些想法,但我也很想得到答案。:)

于 2012-10-12T08:40:13.820 回答
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 访问它。

还要记住,如果你正在做一个完整的页面缓存,你的页面不应该有特定于会话的显示(例如显示成员的栏或什么),因为它们也会被缓存。查看特定缓存(变量或页面的一部分)的框架。

第二种方法:

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

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

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

第四种方法:

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

于 2012-10-12T08:46:40.867 回答
1

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

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