Во времена "статического" Интернета, которые местами еще не закончились, кеширование страниц приносило экономию трафика и быстроту работы. Прокси-сервера провайдеров делали работу в Интернете быстрее. Сегодня ситуация поменялась кардинально, часто функции кеширования в браузерах и прокси-серверах только мешают нормальной работе.
Максимальная продолжительность хранения страницы в кеше браузера пользователя нам скорее всего неподвластна, так как она зависит от настроек браузера, занятости диска и других параметров. Конечно можно сообщить браузеру о том, какое время страница точно не станет меняться, но сколько она при этом будет храниться в кеше не известно.
Зато практически со 100% уверенностью можно сказать браузеру и прокси о том, что страницу не стоит куда-либо сохранять. Для этого в протоколе HTTP есть несколько полей заголовка:
Expires - время жизни страницы;
Last-Modidied - дата последнего изменения;
Cache-Control - параметры управления кешем;
Pragma - тоже самое для версии 1.0;
Подбирая значения этих полей можно управлять процессом кеширования страницы. Например, если дата последнего изменения страницы Last-Modified меньше, чем ее время жизни Expires, то браузер посчитает весьма закономерным поместить эту страницу в кеш. Если мы насильно поменяем значения этих полей, чтобы такое сравнение больше не проходило, то браузер перестанет кешировать эту страницу. Для вывода заголовков HTTP в PHP существует специальная функция header(), в описании которой в качестве примера приведен именно процесс контроля кешем:
Код:
<?php
// Date in the past
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
// always modified
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
// HTTP/1.1
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
// HTTP/1.0
header("Pragma: no-cache");
?>
Если Вы будет вставлять этот код в начало каждого PHP файла, то он не будет кешироваться.
Этот код на Internet Explorer действует безотказно, зато почему-то не всегда на Opera и Firefox, возможно и на другие браузеры. Алгоритм их работы не всем известен, и возможно они игнорируют некоторые поля в заголовках ответов HTTP. Тогда в таком случае можно попробовать продублировать эти настройки в коде HTML.
Например можно создать такой код:
Код:
<?php
echo "<meta http-equiv="cache-control" content="no-store, no-cache, must-revalidate">";
echo "<meta http-equiv="expires" content="Mon, 26 Jul 1997 05:00:00 GMT">";
echo "<meta http-equiv="last-modified" content="". gmdate("D, d M Y H:i:s") . " GMT">";
?>
Не знаю, перебор ли это, но делая вывод этого HTML скорее всего можно сказать, что практически все браузеры должны срабатывать, по крайней мере те, которые хоть как-то считаются со стандартами.