Как я могу закончить сеанс при нажатии кнопки "Назад назад" в asp.net

Это мой сценарий:

У меня есть следующие страницы:

  • 1 Страница входа
  • 1 главная страница как "ABC.Master"
  • 3 дочерних страницы как "страница 1", "страница 2", "страница 3".

Страница 1, страница 2 и страница 3 являются дочерними страницами главной страницы "ABC.Master".

Поток страниц:

  • После ввода имени пользователя и пароля, если я нажму на Login, он переместится на страницу 1
  • На странице 1, если я нажимаю на некоторые ссылки, он перемещается на страницу
  • На странице 2, если я нажму кнопку "Назад в браузере", сеанс должен быть истек.

Примечание. Это должно быть чисто банковским сайтом. i.e) При нажатии на кнопку "Назад" кнопка "Срок действия сеанса" истек.

1 ответ

Это было проблемой на некоторое время. Большинство людей использовали это, чтобы обойти это:

protected void Page_Load(object sender, EventArgs e)
{
 Response.Cache.SetCacheability(HttpCacheability.NoCache);
 Response.Cache.SetExpires(Now.AddSeconds(-1));
 Response.Cache.SetNoStore();
}

Этот фрагмент кода в основном направляет текущую страницу, которая истекает сразу же после ее публикации, и устанавливает, чтобы страница не кэшировала ни один из ее содержимого.

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

Обход проблемы:

protected void Page_Load(object sender, EventArgs e)
{
 Response.Cache.SetCacheability(HttpCacheability.NoCache);
 Response.Cache.SetExpires(Now.AddSeconds(-1));
 Response.Cache.SetNoStore();
 if (Page.IsPostBack){
 if (isPageExpired()){
 Response.Redirect("expired.htm");
 }
 else {
 Session("TimeStamp") = Now.ToString;
 ViewState("TimeStamp") = Now.ToString;
 }
 }
}
private boolean isPageExpired()
{
 if (Session("TimeStamp") == null || ViewState("TimeStamp") == null)
 return false;
 else if (Session("TimeStamp") == ViewState("TimeStamp"))
 return true;
 else
 return false;
}

В принципе, всякий раз, когда страница загружается, она проверяет, является ли она повторно отправленной, вызывая функцию isPageExpired. Если функция возвращает true, она перенаправляет страницу на ответ с истечением срока действия страницы; если нет, он устанавливает две временные метки: один сохранен в состоянии сеанса, другое состояние представления.

Функция isPageExpired сравнивает временную метку, сохраненную в состоянии сеанса, и временную метку в представлении состояния. Если они отличаются, пользователь отправил форму из кеша; то страница направляет их на ответ с истечением срока действия страницы.

licensed under cc by-sa 3.0 with attribution.