Какие методы можно использовать, чтобы избежать кэширования страницы браузером?

У меня есть пользователь, который пытается просмотреть вопросы онлайн-экзамена. Во время экзамена выбирают 1 из 4 ответов и нажимают «Ответить». Для этого пользователя кажется, что он снова и снова загружает одну и ту же страницу/вопрос, где он должен переходить к новому вопросу после каждого ответа на вопрос. Я предполагаю, что это кеширование, но это не похоже на кеширование браузера, поскольку они пробовали и Internet Explorer, и Firefox. Они используют спутниковый интернет, поэтому я предполагаю, что в их сети/маршрутизаторе есть какое-то другое кэширование.

Вот заголовки, которые отправляются с сервера.

HTTP/1.1 200 OK 
Date: Tue, 03 Mar 2009 05:52:38 GMT 
Server: Apache/2.2.8 (Unix) 
X-Powered-By: PHP/5.2.6 
Set-Cookie: PHPSESSID=[...]; path=/ 
Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Connection: close 
Content-Type: text/html; charset=UTF-8

Я попросил пользователя полностью сбросить настройки своего браузера, но это не изменило ситуацию. Я добавил временную метку в GET-запрос/строку страницы, например:

/path/question.php?exam_id=2323&user_exam_id=2334&timestamp=1236063834

Какие другие методы я могу использовать, чтобы заставить компьютер пользователя обновлять страницу при каждой загрузке страницы?

Сервер работает под управлением Apache, PHP, MySQL.


person Darryl Hein    schedule 03.03.2009    source источник


Ответы (3)


См. спецификацию w3.org по Cache-Control, у вас может быть только одно значение для Cache-Control. Я полагаю, вы хотите без кеша.

РЕДАКТИРОВАТЬ: Либо это старая спецификация, либо де-факто она отличается. Пытаться

Cache-Control: no-cache, no-store
Pragma: no-cache
Expires: -1

(из здесь)

person Simon Buchan    schedule 03.03.2009

Set-Cookie: PHPSESSID=[...]; путь=/

Возможно ли, что у них есть какой-то элемент управления файлами cookie?

Если это так, PHP можно настроить для распространения идентификатора сеанса через URL-адрес.

person David L Morris    schedule 03.03.2009
comment
Как это повлияет на кеширование? Идентификатор сеанса одинаков для каждой страницы в текущем сеансе. - person Darryl Hein; 03.03.2009
comment
Я не думаю, что это как-то связано с кэшированием. В этих заголовках уже есть все известные очистители кеша; больше похоже на то, что ваше приложение не работает без файлов cookie. - person bobince; 03.03.2009
comment
Дэррил, я думаю, это зависит от того, как ты проведешь сеанс. При желании вы можете сохранить это в локальной памяти на сервере и не использовать файл cookie. Помня, что клиент (по умолчанию) полностью не имеет состояния. - person David L Morris; 04.03.2009

Я использую:

Cache-Control: no-cache
Pragma: no-cache
Expires: Thu, 01 Jan 1970 00:00:00 GMT

Редактировать: ... и никогда не было проблем. Кажется, что между пользователем и вашим приложением находится какой-то очень сильный уровень кэширования.

person cherouvim    schedule 03.03.2009