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

cro*_*don 18 php

我有一个页面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)

  • 杀死它,燃烧它,将灰烬扔到密封的胶囊中晒太阳 (11认同)
  • 我刚刚尝试了以上所有方法,但它似乎仍在缓存页面。 (2认同)

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)


Sar*_*raz 8

<?php header("Cache-Control: no-cache, must-revalidate");
Run Code Online (Sandbox Code Playgroud)