我发现了很多关于如何停止缓存的信息,但很少有关于强制缓存的信息。我有一个动态的PHP页面,它从数据库中检索数据。在这个页面上,我有一个按钮,它使用JS函数重新加载页面,并在用户点击它时更新内容。该页面也会在一段时间后重定向。
这只能使用标头缓存控制吗?
现在,我使用的header("Cache-Control: max-age=3600, private");
根本不会缓存页面。
答案 0 :(得分:0)
为了解决这个问题,你必须考虑几件事。
首先,对于动态内容,您需要设置标题的页面可能不一定是您认为的页面。这是一个例子。
假设您有一个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';
看起来更好。现在好运,你的页面将被缓存。