LINUX.ORG.RU

Как отследить, нажимал ли пользователь кнопку «Назад» в браузере?


0

0

Здравствуйте!


Интересует вот что. Есть веб-приложение, в котором пользователь должен последовательно «по шагам» выполнить несколько действий. Переменная, считающая шаги, находится в сессии. Недопустима ситуация, когда пользователь на каком-то шаге нажимает в браузере пару раз кнопку «Назад», делает другой выбор действий (не тот, который был изначально).

Надо этот момент отследить, и попросить пользователя все сделать сначала.

Вопрос. Существует ли какой-то хороший метод, чтобы сервер узнал, что пользователь «возвращался» по истории назад.



ЗЫЖ: Если бы небыло кеширования, сервер еще мог бы понять, что действие идет непоследовательно. Но по-настоящему кеширование я отключить не смог, хотя пробовал методы, описанные в википедии, и методы, описанные в критикующих википедию статьях. Я делал запрет и в HTTP-заголовках:

header(«Cache-Control: no-store, no-cache, must-revalidate»);
header(«Expires: ».date(«r»));
header(«Pragma: no-cache»);

И одновременно прописывал в meta-тегах:

<meta http-equiv=«pragma» content=«no-cache» />
<meta http-equiv=«cache-control» content=«no-cache» />

бесполезно. Если в браузере нажимать назад, он никаких запросов серверу не шлет, просто берет страницу из своего кеша.


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

wfrr ★★☆
()

>Недопустима ситуация, когда пользователь на каком-то шаге нажимает в браузере пару раз кнопку «Назад», делает другой выбор действий (не тот, который был изначально).

Вот лучше это устранить.

Почему недопустима? Пиши данные в сессию и меняй их, если ответ поменялся. Если же это запрещено по смыслу задачи, предупреждай пользователя на основе данных из сессии («вы уже ввели на этой странице данные, мы вам сейчас всё сбросим») и запускай всё сначала.

anonymous
()
Ответ на: комментарий от qnikst

:}

// По теме

Почему нельзя то? Зачем ты в сессии что-то считаешь? Осиль input type=«hidden» и тогда проблемы просто не будет.

Deleted
()

>Надо этот момент отследить, и попросить пользователя все сделать сначала.

if ($_POST['step']<$_SESSION['step']) {
быдлокод для очискти сессии и\или перекидывания на нужный шаг
}

azure ★★
()

Да-да, зачем это так издеваться над юзером?

Xenius ★★★★★
()

Если ттебе это нужно, значит ты что-то не правильно делаешь. Тоже самое если надо запретить «назад».

ZveN
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.