Re[3]: как отключить кеш
От: Аноним  
Дата: 27.01.05 12:11
Оценка:
Здравствуйте, sv.vlad, Вы писали:

SV>спасибо за детальые обяснения.... очень помогло....

SV>проблема в следующая (с чего все началось):
SV>надо при нажитии клавиши Back редиректить браузер на предефайнутую траницу. Я придумал следующий алгоритм:
SV>1. на клиенте делаю <input type='hidden' value='0'>
SV> Сабмит происходит на всех страницах с помощю одной функции. При сабмите значение хидн елемента инкрементируется на 1.
SV>2. на сервере мы проверяем, если значение хидн елемента больше 1 то редиретим на предефайнетею страницу.

SV>теперь допустим юзер нажал кнопку Back. Переходим на страницу назад, при етом как я понимаю страница вытаскивается с кеша. Значение хидн елемента там 1. При сабмите страницы на сервер оно инкрементируется на 1, и принимает значение 2. На сервере проесзодит проверка 2>1, и соответственно редирект. Проблема заключается в том что если юзер нажал кнопку Back а потом F5, то значение хидн елемента обнуляется, и страницу можна свободно сабмитить.


Кажется я примерно догадываюсь о чем идет речь, ты делаешь что-то вроде оформления заказа или регистрации, состоящей из нескольких шагов, причем логика перехода между шагами определяется ответами на предыдущих шагах. И нужно чтобы пользователь последовательно выполнил все шаги, ничего не пропуская и не бегая взад-вперед. Угадал?

Все что тебе нужно сделать — это использовать механизм сессий, надеюсь ты знаком с ними. В сессии ты просто хранишь номер текущего шага. Допустим, в самом начале $_SESSION['step'] = 0;, при сабмите некой формы, например, с кнопкной [Начать], в обработчике этой формы ты делаешь $_SESSION['step'] = 1; Если у тебя происходит редирект после пост-запроса (что весьма желательно), на страницу к примеру: /order.php?step=1, то на этой странице делаешь проверку:

session_start();

....

if (isset($_GET['step']) && isset($_SESSION['step']) && $_GET['step'] == $_SESSION['step'])
{
// все хорошо, выводим страницу с формой
}
else
{
header('Location: '.$full_url_here_to_first_step);
exit();
}

Вроде примерно так.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.