【问题标题】:Refresh site when accessed a second time [duplicate]第二次访问时刷新站点[重复]
【发布时间】:2015-07-09 10:38:19
【问题描述】:

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

所讨论的网站是一种“构建您的定制产品”类型的网站,并使用多步骤表单来指导客户完成产品构建的各个步骤。客户希望网站在每次用户访问网站时,无论是通过直接 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。

有什么想法吗?

【问题讨论】:

  • 所以你想强制用户浏览器从不缓存页面?你能详细描述一下“不起作用”的具体含义吗?
  • 我用更多细节更新了我的问题。

标签: php cache-control no-cache


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    删除的[大约]评论说:

    您应该将两条 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的answer找到。

    感谢您的帮助!

    【讨论】:

      猜你喜欢
      • 2012-08-09
      • 1970-01-01
      • 1970-01-01
      • 2016-11-22
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      • 2019-11-05
      • 2019-06-17
      相关资源
      最近更新 更多