Здравствуйте, 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();
}