0

我想在每次访问页面时“强制加载”一个页面实例。

有问题的网站是一个“构建您的定制产品”类型的网站,并使用多步骤表单来指导客户完成产品构建的步骤。客户希望网站在每次用户访问网站时,无论是通过直接 url 还是通过单击浏览器上的“后退”和“前进”按钮,都必须刷新。换句话说,没有缓存(对吗?)。

我尝试使用我在 SO 和其他网站上找到的解决方案,主要包括

header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

但这没有用。

所以我尝试了自己的解决方案:

$location = "/fabriquer/";
if(isset($_COOKIE['first_load']) && $_COOKIE['first_load'] == "true") {
    setcookie('first_load', 'false');
    header("Location: " . "http://" . $_SERVER['HTTP_HOST'] . $location);
} else {
    setcookie('first_load', 'true');
}

但这似乎也无法正常工作。当我按下浏览器上的后退按钮以返回该站点时,不会发生刷新,但在第二种解决方案中 cookie 设置为 true/false。

有任何想法吗?

4

2 回答 2

0

正如在今天早些时候的评论中提到的那样,以及另一条 [已删除?] 评论,我的问题确实与此处提出的问题重复。

事实证明我做错了,删除的评论让我走上了正确的道路,直到我看到乔的评论。

删除的[大约]评论说:

您应该将两条 Cache-Control 行合并为一条,因为第二条覆盖了第一条。

谁写的,谢谢。

所以我只是查看了原始问题中的代码(上面链接),发现下面的代码解决了我的问题。

header('Cache-Control: no-cache, no-store, must-revalidate'); // HTTP 1.1.
header('Pragma: no-cache'); // HTTP 1.0.
header('Expires: 0'); // Proxies.

然后我在我的浏览器上进行了测试(为了安全起见,正确清除了缓存并使用了隐身模式),它运行良好。我不会“回答我自己的问题”,但我想提供我的推理。这个问题确实是重复的,答案在 BalusC's answer中找到。

谢谢您的帮助!

于 2015-04-30T13:31:37.910 回答
0

让浏览器缓存页面的唯一方法是url每次都更改。例如附加一个随机数或日期时间作为参数

$url = $url.'?ver='.rand(1,1000);

当您从一个页面转到另一个页面时,将此添加到每个 url。我在我的上添加了一个版本号。这样,每当我更新网站时,每个人都会得到新的副本。

于 2015-04-30T02:25:15.180 回答