Показать "веб-страница истекла" на кнопке "Назад"

Что необходимо для того, чтобы браузер отображал повсеместное сообщение "эта страница истек", когда пользователь нажимает кнопку "Назад"?

Каковы некоторые удобные способы предотвращения использования пользователем кнопки "Назад" в webapp?

Ответ 1

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

Чтобы избежать обоих сообщений, есть несколько вещей, которые нужно попробовать:

1) Используйте вместо этого форму GET. Это зависит от того, что вы делаете, но это не всегда хорошее решение, поскольку существуют ограничения по размеру для запроса GET. И информация передается в строке запроса, которая не является наиболее безопасной для параметров.

- или -

2) Выполните перенаправление на серверную страницу на другую страницу после формы POST.

Похоже, что на подобный вопрос был дан ответ:

Перенаправить с 303 после POST, чтобы избежать "Веб-страницы истекли" : будет ли она работать, если есть больше байтов, чем может обрабатывать запрос GET?

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

Ответ 2

вам нужно установить параметр управления pragma-cache в заголовках HTTP: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9

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

ps: как было предложено Стивом, перенаправление через GET является правильным способом (или проверка перемещения страницы с помощью JS).

Ответ 3

Попробуйте использовать следующий код в Page_Load

Response.Cache.SetCacheability(HttpCacheability.Private)

Ответ 4

используйте session_start одно из следующих значений:

session_cache_expire(60); // in minutes 

ini_set('session.cache_limiter', 'private');

/Примечание:

Язык - это PHP

Ответ 5

Я не уверен, что это стандартная практика, но я обычно решаю эту проблему, не отправляя заголовок Vary только для IE. В Apache вы можете поместить следующее в httpd.conf:

BrowserMatch MSIE force-no-vary

В соответствии с RFC:

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

Практический эффект заключается в том, что когда вы возвращаетесь к POST, IE просто получает страницу из кеша истории. Никакой запрос не поступает на сервер. Я вижу это явно в HTTPWatch.

Мне было бы интересно услышать потенциальные плохие побочные эффекты этого подхода.