我有一个页面index.php,它显示基于mysql db的信息。它上面有表单,表单的操作设置为一个名为process.php的单独页面。 Process.php执行所有数据库CRUD的操作,然后使用
header("Location: /webadmin/email/index.php");
将用户发送回原始页面。
这似乎工作得很好,除了原始索引页面并不总是反映process.php所做的更改。我假设页面正在缓存,因为如果我进行刷新(Ctrl + F5),页面将显示最新数据。
如何阻止此页面被缓存?我试过了what the PHP page for header() says,但它似乎没有用。 “缓存控制”和“过期”选项似乎完全没有效果 - 页面仍在缓存中。
更新
好的,我错了。显然,以下内容适用于IE:
<?php header("Cache-Control: no-cache, must-revalidate");
然而,它肯定不适用于FF,它仍然显示缓存版本。关于为什么会这样做的任何想法,以及如何让它停止缓存?
答案 0 :(得分:39)
我会安全地玩,并尝试输出man(和浏览器)已知的所有缓存杀手。我的目录目前包括:
<?php
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache"); // HTTP/1.0
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
?>
答案 1 :(得分:15)
让所有浏览器排成一行:
header("Location: /webadmin/email/index.php?r=".mt_rand(0, 9999999));
它不漂亮,但它符合问题:“如何 强制 ......”
答案 2 :(得分:15)
这是使其适用于所有浏览器的正确顺序:
<?php
header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header("Pragma: no-cache"); // HTTP/1.0
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
?>
答案 3 :(得分:8)
<?php header("Cache-Control: no-cache, must-revalidate");
答案 4 :(得分:0)
尝试使用虚假的查询字符串欺骗浏览器:
header("Location: /webadmin/email/index.php?x=1");
答案 5 :(得分:0)
<?php
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
?>
执行此操作应阻止所有浏览器中的缓存
在IE FF和Chrome中测试