Кэшированный редирект или постоянно перебрасывает страница

Столкнулся с такой ситуацией. Страница (назовем её страница А) перенаправляет пользователя на форму входа-регистрации (Страница Б), если он не определяется как пользователь. Пользователь входит/регистрируется и при повторном переходе к Странице А вновь перенаправляется на Страницу Б.

В общем, сервер упорно не хочет заново проверять условие “пользователь вошел” (т.к. подглядывая в переменные сессии на соседних страницах - на той же форме регистраци - можно увидеть, что пользователь определяется корректно).

Оказалось, дело в том, что сервер перед редиректом устанавливает кэширующие заголовки (видимо, в погоне за уменьшением нагрузки на сервер и, соответственно, увеличением скорости работы), которые “намекают” браузеру, что ответ надо бы сохранить (в данном случае на 2 часа). И тут же передается редирект с кодом ответа 301 или 302, который и попадает в кэш. При повторном обращении запрос к серверу (именно там производится проверка, вошел пользователь или нет) вообще не производится, а результат, полученный из кэша повторно перенаправляет на страницу Б. Помогла повторная отправка аналогичных заголовков, указывающих на то, что страницу кэшировать не нужно.

header(”Expires: Mon, 3 Apr 2000 07:00:00 GMT”);
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Pragma: no-cache");

Вот такой вот “кэшированный редирект”.

Автор будет признателен, если Вы поделитесь ссылкой на статью, которая Вам помогла:
BB-код (для вставки на форум)

html-код (для вставки в ЖЖ, WP, blogger и на страницы сайта)

ссылка (для отправки по почте)

Добавить комментарий