Предотвращение нажатий кнопок назад в браузере - PullRequest
1 голос
/ 28 июля 2011

Я понимаю, что этот вопрос задают снова и снова, но я хочу, чтобы способ обрабатывать нажатия кнопок "Назад" на стороне сервера (например, банковские приложения).

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

Можете ли вы направить меня к некоторым учебникам по этому вопросу?

Ответы [ 5 ]

1 голос
/ 28 июля 2011

Простейший способ решения этой проблемы состоит в следующем.

Каждая страница снабжается уникальным идентификатором / токеном.Этот уникальный идентификатор всегда передается при отправке любых форм и отслеживается на сервере как «используемый».

Если пользователь когда-либо нажимает «назад» и повторно отправляет ту же форму, сервер проверяет уникальный идентификатор... замечает, что это дубликат, а затем игнорирует отправку.

Обратите внимание, что это физически не помешает пользователю вернуться "назад", но если последним действием было "перевести 1 000 000 долларов!""- пользователь случайно не передаст 2 млн.

0 голосов
/ 28 июля 2011

Я также искал это, и в конце концов я нашел маленький трюк, я думаю, что это может для вас.

  • На каждой странице есть функция javaScript, которая вызывает сервер с ajax, чтобы проверить, доступна ли эта страница в то время.
  • На стороне сервера вы сохраняете доступность (вместе с сеансом).
  • Если не перенаправить страницу, как вы хотите.
0 голосов
/ 28 июля 2011

Поручить странице не использовать кеш.Добавьте в заголовок элемент страницы

<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
0 голосов
/ 28 июля 2011

Здесь нужно решить две проблемы.

Во-первых, как браузеры обычно обрабатывают кнопку возврата. Вы должны использовать POST-запрос, чтобы перейти на страницу, к которой у кнопки «Назад» не должно быть доступа. Большинство браузеров используют локальный кеш для запросов GET, поэтому, если вы выполните GET, ваш сервер просто не будет доступен вообще. Однако POST-запрос обычно выполняет новый запрос. Многие браузеры также предупреждают пользователя и отображают диалоговое окно с надписью, т. Е. «Вы уверены, что хотите отправить форму снова?». Таким образом, используя POST, вы увеличиваете вероятность того, что каждая загрузка страницы этой страницы будет выполнять новый запрос на ваш сервер.

Вы также можете использовать запрос GET, когда ваш сервер возвращает HTTP-заголовки, что заставляет браузеры не загружать страницу из кэша. Экспериментируйте с этим.

Вторая проблема - удостовериться, что вы сделали недействительными дубликаты запросов на стороне сервера. Первое решение, которое я могу придумать, - это создать токен, который вы отправляете вместе с формой и сохраняете в базе данных при каждом запросе. Если запрос выполняется с токеном, который уже сохранен, вы можете сделать запрос недействительным. Возможно, есть лучшие методы, но я оставлю это как упражнение для читателя;)

0 голосов
/ 28 июля 2011
  • Сделать страницы недоступными для кэширования
  • отслеживать пользовательскую серверную маршрутную страницу, если она посещает посещенную страницу, которую она не должна вернуться, в сеанседанные могут быть.
  • проверить, запрашивает ли она посещаемый ресурс, и обработать соответствующим образом
  • . Фильтр - лучшее место для
.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...