Как заставить страницу не кэшироваться в PHP?

У меня есть страница, index.php, которая показывает информацию, основанную на mysql db. На нем есть формы, и действие для форм устанавливается на отдельную страницу под названием process.php. Process.php выполняет всю базу данных CRUD, затем использует

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

чтобы отправить пользователя на исходную страницу.

Кажется, что он работает нормально, за исключением того факта, что исходная индексная страница не всегда отражает изменения, сделанные process.php. Я предполагаю, что страница кэшируется, потому что если я сделаю обновление (Ctrl + F5), страница покажет последние данные.

Как я могу предотвратить кэширование этой страницы? Я пробовал то, что говорит страница PHP для заголовка(), но, похоже, она не работает. Параметры Cache-Control и Expires, похоже, не имеют никакого эффекта - страница все еще кэшируется.

Обновление

Хорошо, я был частично не прав. По-видимому, в IE работает следующее:

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

Однако, он определенно НЕ работает в FF, который по-прежнему показывает кэшированную версию. Любые идеи о том, почему это так, и как я могу заставить его остановить кеширование?

Ответы

Ответ 1

Сделайте все браузеры в очереди:

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

Это не очень, но подходит для вопроса: "Как сила..."

Ответ 2

Я буду играть безопасно и попытаюсь вывести все убийцы кэша, известные человеку (и браузеру). В настоящее время мой список состоит из:

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

Ответ 3

Это правильный порядок, чтобы заставить его работать во всех браузерах:

<?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");
?>

Ответ 4

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

Ответ 5

Попробуйте обмануть браузер с помощью ложной строки:

header("Location: /webadmin/email/index.php?x=1");

Ответ 6

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