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

时间:2009-12-15 13:58:56

标签: php

我有一个页面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,它仍然显示缓存版本。关于为什么会这样做的任何想法,以及如何让它停止缓存?

6 个答案:

答案 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中测试