INS
Новичок
Кэш, редиректы и авторизация в сессии
Согласен быть убитым, только перед смертью объясните всё-таки, а?. Поиск не помог.
Ключевые моменты построения проекта:
* Одна основная точка входа: index.php
* Обработка всех данных из форм: ua.php (user_actions) и обратный редирект header("Location: ".$_SERVER['HTTP_REFERER']);
* Переадресация ошибки 404 на index.php
* Авторизация в сессию
Проблема:
НЕКОТОРЫЕ (не все) юзеры не могут авторизоваться. Успешно проходят регистрацию, подтверждают регистрацию по мылу (т.е. в сущности система работает). Копание в проблеме установило, что у этих юзеров стоит прокси.
Правильная схема прохождения:
1. Юзер вводит логин/пароль и отправляет запрос на ua.php
2. Там производится проверка, данные о входе сохраняются в сессии
3. ua.php производит редирект обратно на страницу, с которой был сделан запрос
4. index.php (точнее, подмодули оного) на основе информации из сессии определяет что пользователь зашёл и выдаёт обновлённую версию страницы (с формой выхода, вместо формы входа грубо говоря)
У тех что не получается, схема получается такая:
1. Вводит логин пароль, отправляет запрос
2. Производится проверка. Данные СОХРАНЯЮТСЯ в сессии (проверено дебагом)
3. Производится редирект обратно.
4. index.php НЕ ОПРЕДЕЛЯЕТ что пользователь зашёл и выдаёт ту же самую страницу с формой входа.
При этом примечательно, что внизу на страничке я вывожу дату генерации страницы (PHP), она всё время меняется. Т.е. вроде бы и не кэш, а вроде бы и он, ибо проблема актуальна только у тех кто за прокси. Где теряется сессионная информация - непонятно! (ID сессии один и тот же, не меняется)
Дополнительно:
Эти строки стоят и в index.php и в ua.php
// prevent cache
header("HTTP/1.0 200 Ok");
header("Expires: Mon, 31 Dec 2000 00:00:00 GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT");
При выводе в HTML-код также вставляются:
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, no-store, must-revalidate">
<META HTTP-EQUIV="EXPIRES" CONTENT="Mon, 22 Jul 2002 11:12:01 GMT">
====================
Чего делать? %( половина бета-тестеров проекта юзают нормально, вторая половина обламывается.. Кто нибудь сталкивался с таким?
Согласен быть убитым, только перед смертью объясните всё-таки, а?. Поиск не помог.
Ключевые моменты построения проекта:
* Одна основная точка входа: index.php
* Обработка всех данных из форм: ua.php (user_actions) и обратный редирект header("Location: ".$_SERVER['HTTP_REFERER']);
* Переадресация ошибки 404 на index.php
* Авторизация в сессию
Проблема:
НЕКОТОРЫЕ (не все) юзеры не могут авторизоваться. Успешно проходят регистрацию, подтверждают регистрацию по мылу (т.е. в сущности система работает). Копание в проблеме установило, что у этих юзеров стоит прокси.
Правильная схема прохождения:
1. Юзер вводит логин/пароль и отправляет запрос на ua.php
2. Там производится проверка, данные о входе сохраняются в сессии
3. ua.php производит редирект обратно на страницу, с которой был сделан запрос
4. index.php (точнее, подмодули оного) на основе информации из сессии определяет что пользователь зашёл и выдаёт обновлённую версию страницы (с формой выхода, вместо формы входа грубо говоря)
У тех что не получается, схема получается такая:
1. Вводит логин пароль, отправляет запрос
2. Производится проверка. Данные СОХРАНЯЮТСЯ в сессии (проверено дебагом)
3. Производится редирект обратно.
4. index.php НЕ ОПРЕДЕЛЯЕТ что пользователь зашёл и выдаёт ту же самую страницу с формой входа.
При этом примечательно, что внизу на страничке я вывожу дату генерации страницы (PHP), она всё время меняется. Т.е. вроде бы и не кэш, а вроде бы и он, ибо проблема актуальна только у тех кто за прокси. Где теряется сессионная информация - непонятно! (ID сессии один и тот же, не меняется)
Дополнительно:
Эти строки стоят и в index.php и в ua.php
// prevent cache
header("HTTP/1.0 200 Ok");
header("Expires: Mon, 31 Dec 2000 00:00:00 GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT");
При выводе в HTML-код также вставляются:
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, no-store, must-revalidate">
<META HTTP-EQUIV="EXPIRES" CONTENT="Mon, 22 Jul 2002 11:12:01 GMT">
====================
Чего делать? %( половина бета-тестеров проекта юзают нормально, вторая половина обламывается.. Кто нибудь сталкивался с таким?
) (сори, нужен ликбез)