Как заставить страницу не кэшироваться в PHP? - PullRequest
17 голосов
/ 15 декабря 2009

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

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

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

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

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

Обновление

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

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

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

Ответы [ 6 ]

39 голосов
/ 15 декабря 2009

Я бы играл безопасно и попытался бы вывести всех известных человеку убийц кэша (и браузера) Мой список в настоящее время состоит из:

<?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
?>
16 голосов
/ 15 декабря 2009

Сделать все браузеры совпадают:

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

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

15 голосов
/ 23 октября 2013

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

<?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");
?>
8 голосов
/ 15 декабря 2009
<?php header("Cache-Control: no-cache, must-revalidate");
0 голосов
/ 29 декабря 2014
<?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 и хром

0 голосов
/ 15 декабря 2009

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

header("Location: /webadmin/email/index.php?x=1");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...