如何强制页面不在PHP中缓存?

php
2022-08-30 21:25:27

我有一个页面,索引.php,显示基于mysql db的信息。上面有表单,表单的操作设置为一个单独的页面,称为 process.php。进程.php做所有数据库CRUD的东西,然后使用

header("Location: /webadmin/email/index.php");

将用户发送回原始页面。

这似乎工作正常,除了原始索引页并不总是反映流程所做的更改.php。我假设页面正在缓存,因为如果我执行刷新(Ctrl + F5),页面将显示最新数据。

如何防止此页面被缓存?我已经尝试了php页面head()所说的,但它似乎不起作用。“缓存控制”和“过期”选项似乎根本没有效果 - 页面仍在缓存中。

更新

好吧,我部分错了。显然,以下内容在IE中确实有效:

<?php header("Cache-Control: no-cache, must-revalidate");

但是,它绝对不适用于FF,FF仍然显示缓存版本。关于为什么会这样,以及如何让它停止缓存的任何想法?


答案 1

我会安全地玩,并尝试输出人类(和浏览器)已知的所有缓存杀手。我的列表目前包括:

<?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
?>

答案 2

使所有浏览器都符合要求:

header("Location: /webadmin/email/index.php?r=".mt_rand(0, 9999999));

它不漂亮,但它符合被问到的问题:“如何强迫......”


推荐