我有一个页面index.php,它显示了基于mysql db的信息.它上面有表单,表单的操作设置为一个名为process.php的单独页面.Process.php执行所有数据库CRUD的东西,然后使用
header("Location: /webadmin/email/index.php");
Run Code Online (Sandbox Code Playgroud)
将用户发送回原始页面.
这似乎工作得很好,除了原始索引页面并不总是反映process.php所做的更改.我假设页面正在缓存,因为如果我进行刷新(Ctrl + F5),页面将显示最新数据.
如何防止此页面被缓存?我已经尝试了header()的PHP页面,但它似乎不起作用.Cache-Control和Expires选项似乎完全没有效果 - 页面仍在缓存中.
更新
好吧,我错了.显然,以下在IE中可以正常工作:
<?php header("Cache-Control: no-cache, must-revalidate");
Run Code Online (Sandbox Code Playgroud)
但是,它绝对不适用于FF,它仍然显示缓存版本.有关为什么会这样的想法,以及如何让它停止缓存?
dan*_*nii 40
我会安全地玩,并尝试输出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
?>
Run Code Online (Sandbox Code Playgroud)
Der*_*huk 16
让所有浏览器都符合要求:
header("Location: /webadmin/email/index.php?r=".mt_rand(0, 9999999));
Run Code Online (Sandbox Code Playgroud)
它不漂亮,但它适合于问题:"如何强迫 ......"
mod*_*rns 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");
?>
Run Code Online (Sandbox Code Playgroud)