Ответ 1
Сделайте все браузеры в очереди:
header("Location: /webadmin/email/index.php?r=".mt_rand(0, 9999999));
Это не очень, но подходит для вопроса: "Как сила..."
У меня есть страница, 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, который по-прежнему показывает кэшированную версию. Любые идеи о том, почему это так, и как я могу заставить его остановить кеширование?
Сделайте все браузеры в очереди:
header("Location: /webadmin/email/index.php?r=".mt_rand(0, 9999999));
Это не очень, но подходит для вопроса: "Как сила..."
Я буду играть безопасно и попытаюсь вывести все убийцы кэша, известные человеку (и браузеру). В настоящее время мой список состоит из:
<?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
?>
Это правильный порядок, чтобы заставить его работать во всех браузерах:
<?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");
?>
<?php header("Cache-Control: no-cache, must-revalidate");
Попробуйте обмануть браузер с помощью ложной строки:
header("Location: /webadmin/email/index.php?x=1");
<?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