У меня есть страница, 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 MYH: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 MYH: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 и хроме