【问题标题】:Cache page when user redirected?用户重定向时缓存页面?
【发布时间】:2016-05-06 16:12:06
【问题描述】:

我找到了很多关于如何停止缓存的信息,但关于强制缓存的信息却很少。我有一个从数据库中检索数据的动态 PHP 页面。在这个页面上,我有一个按钮,它使用 JS 函数来重新加载页面并在用户单击它时更新内容。该页面也会在一段时间后重定向。

  • 如果用户在浏览器中按下返回按钮,则页面重定向后,向他们显示重定向之前存在的相同页面。

PHP 是否可以仅使用标头缓存控制?

现在,我正在使用 header("Cache-Control: max-age=3600, private");,它根本不缓存页面。

【问题讨论】:

  • PHP: Detect Page Refresh的可能重复
  • 并非所有浏览器都这样做,但一种相当可靠的方法是检查 $_SERVER['HTTP_REFERER'] 是否为空。
  • 对于将其标记为重复的人,这个问题是关于缓存的。它不是那个问题的重复。

标签: php caching


【解决方案1】:

为了解决这个问题,你必须考虑几件事情。

首先,对于动态内容,您需要设置页眉的页面不一定是您认为的页面。这是一个例子。

假设您有一个 PHP 脚本,其中包含另一个 PHP 脚本。这 包含的页面是您和用户看到的,但是,就 浏览器担心请求来自该父 PHP 文件。在我的 情况下,我试图在included.php 中设置标题,而不是 parent.php.

第二个考虑因素是您是否使用会话。如果您需要缓存会话数据以及页面内容,则需要在该页面上启动会话之前使用session_cache_limiter() 设置正确的标题。

当我使用浏览器开发工具查看网络请求并查看标头时,我的问题变得很明显。即使我设置了它们并指定了过期时间(max-age),浏览器也忽略了它。

但是,即使设置了正确的缓存控制标头,并在开发人员工具中看到它们,页面仍然没有被缓存。这怎么可能!?!我会告诉你为什么,注意那些标题中的Pragma: "no-cache"?这就是为什么!我们需要改变它。

header("Cache-Control: max-age=5600, private_no_expire");
header("Pragma: cache");

require_once 'included.php';

这样看起来更好。现在运气好的话,您的页面将被缓存。

【讨论】:

    猜你喜欢
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多