ASP.Net: истечение срока действия страницы при переходе назад - PullRequest
2 голосов
/ 17 марта 2010

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

Я помещаю в Global.asax :: Application_BeginRequest

    Response.Cache.SetCacheability(HttpCacheability.NoCache)
    Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1))
    Response.Cache.SetValidUntilExpires(False)
    Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches)
    Response.Cache.SetNoStore()

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

Я видел сообщения, где люди предлагали использовать подход JavaScript, позвонив по номеру

    History.Forward(1)

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

Ценю любые предложения.

Ответы [ 2 ]

4 голосов
/ 17 марта 2010

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

0 голосов
/ 29 марта 2010

После большого количества времени, потраченного на расследования и испытания, я применил обходной путь и решил поделиться им на тот случай, если кто-то еще сочтет его полезным. Этот (наиболее близкий к решению, но только за исключением Firefox) обходной путь приведет к:

  1. IE6 - 8: «Страница просрочена» появляется
  2. Chrome: Появляется «Подтвердить повторную отправку формы»
  3. Firefox: Появится диалоговое окно с просьбой повторно отправить данные поста

Обход:

  1. С настройками Response.Cache, перечисленными в исходной проблеме, опубликованной выше
  2. Измените все гиперссылки на другую страницу сайта на LinkButton.
  3. Установите PostBackURL в LinkButton для ссылки href URL. Это необходимо, потому что только с POST, вместе с заданным нами заголовком, браузер истечет первоначально опубликованной страницей в истории и запросит повторно.
  4. Вместо использования Response.Redirect в коде позади, используйте Server.Transfer, так как Response.Redirect будет использовать GET для другой страницы.

Это решение не запрещает пользователю переходить обратно на страницу в истории, но подтверждает необходимость публикации данных еще раз. History.Forward(1) работает не совсем хорошо, как упомянуто в оригинальном сообщении, и я также признаю возможность автоматического повторного размещения на странице без каких-либо предупреждений, в результате чего на сервер отправляется несколько запросов.

Основная идея состоит в том, чтобы POST на каждую страницу вместо GET, и поэтому каждая страница, посещенная на сайте, будет переходить на страницу с истекшим сроком при переходе назад. Теперь пользователь всегда может обновить данные для публикации.

...