Ограничение использования кнопки «Назад» без JavaScript - PullRequest
0 голосов
/ 13 октября 2009

В настоящее время я участвую в проекте ASP.NET, где мне нужно ограничить возможность пользователей возвращаться в структуру страницы с помощью кнопки «Назад». По сути, это навигация в стиле мастера, и я не хочу давать пользователю возможность вернуться с последнего шага и повторно отправить данные. К сожалению, JavaScript не вариант, поэтому я «решил» его, установив HttpCacheability для каждого события загрузки страниц в NoCache. Это дает пользователю страницу «Срок действия страницы истек», когда он нажимает кнопку «Назад». Это совсем не элегантно, и мне интересно, какие еще варианты у меня есть для достижения желаемых результатов.

Ответы [ 4 ]

2 голосов
/ 13 октября 2009

Короткий ответ: «Вы не можете». Поскольку это функциональность на стороне браузера, любой способ сделать это будет через что-то, открываемое браузером, что означает, что его легко победить. Длинный ответ: ты не хочешь. Это создает проблемы с удобством использования (любые изменения в обычном поведении браузера нежелательны). Я бы предложил использовать куки-файл сеанса, чтобы определить, где они должны находиться в процессе, и выпустить перенаправление 302 на соответствующую страницу, если они попытаются получить доступ к неправильной странице процесса (перед обработкой любых данных GET / POST, а также сбросом любого данные, которые они могли представлять). Попытка победить пользователей, изменив работу основных функций браузера, всегда приводит к головным болям.

2 голосов
/ 13 октября 2009

Сохраните состояние навигации на стороне сервера, и если пользователь переходит на страницу, которая не соответствует следующему / предыдущему клику, перенаправьте его туда, где он должен был быть.

2 голосов
/ 13 октября 2009

Предоставьте только один URL для всего вашего мастера. Отображаемый шаг будет зависеть от состояния сеанса, в котором могут храниться шаги, которые они уже выполнили.

Таким образом, нет «недействительного» URL-адреса для загрузки пользователем.

Возможно, вам следует рассмотреть возможность создания UserControl для каждого шага. Затем вы размещаете все шаги на одной странице .aspx, отображаете и скрываете их соответствующим образом.

1 голос
/ 13 октября 2009

Это невозможно. Даже если он работает в Internet Explorer в Firefox, он не будет работать.

Единственный способ справиться с этим - сохранить состояние пользовательского шага в сеансе, базе данных и т. Д., А затем при отправке проверить, что они отправляют данные на правильном шаге.

...