Большинство сценариев формируют документы, которые при каждом запуске программы изменяются. Очевидно, если браузер пользователя начнет кэшировать такие документы(методы GET и HEAD по умолчанию кешируются и запоминаются в истории посещений браузера и прокси-сервера), ничего хорошего не получиться.
Запретить кэшировать документы браузером и Proxy-серверами можно при помощи средств языка PHP, а именно функции Header(). В сети Интернет можно встретить много примеров с нижеприведенным кодом, который является !не рабочим!!. И пользоваться им не рекомендуется!!!
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modified
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Pragma: no-cache"); // HTTP/1.0
1 способ.
Взамен этого большого и не рабочего кода рекомендуется в качестве правильного кода в сценарии использовать всего одну строку:
Header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); // HTTP/1.1
no-store – означает – приватные данные не сохранять на локальном диске. Отключает кеширование в браузерах.
no-cache – отключение кеширования для прокси-серверов.
2 способ.
Все тоже самое можно сделать используя .htaccess. Видя следующие строки, сервер Apache начнет всегда автоматически их добавлять на любой ответ.
# Заголовок Cache-Control
<ifmodule mod_headers.c="">
Header set Cache-Control "no-store, no-cache";
</ifmodule>
# Заголовок Expires
<ifmodule mod_expires.c="">
ExpiresActive On
ExpiresDefault "now";
</ifmodule>
p.s. mod_headers.c и mod_expires.c должен быть включен на сервере.