http://blog.priyakant.com/2014/09/23/browser-back-button-prevent/
Резюме:
Кнопка возврата в браузере - Запретить отображение предыдущих страниц после выхода из системы - Подход на основе файлов cookie
Опубликовано 23 сентября 2014 года Приякант Патель - Оставить комментарий
Запретить отображение предыдущих страниц после выхода из системы
Клиентское браузерное приложение кэширует страницу по соображениям производительности. В этом случае, когда пользователь нажимает кнопку «Назад» (кнопка «Назад» в браузере), отображается предыдущая страница из кэша.
Случай 1: пользователь все еще вошел в систему.
нормально отображать содержимое предыдущей страницы.
Случай 2: пользователь вышел из системы.
Потенциально следующий пользователь может нажать на кнопку «Назад» в браузере и просмотреть содержимое предыдущей страницы.
Это может быть большой проблемой во многих приложениях. В финансовом приложении потенциальный пользователь может видеть финансовые данные. Или заявление, связанное с медицинским обслуживанием / пациентами, это может быть нарушением HIPAA, и компании могут быть назначены большие штрафы.
Итак, вернемся к делу. Как можно решить эту проблему?
Я предлагаю подход HTTP Cookie.
Шаги:
Создание HTTP Cookie со стороны сервера с скользящим сроком действия. К которым можно получить доступ из клиентского JavaScript (Примечание. Браузер очищает этот файл cookie по истечении срока действия).
Очистить этот файл cookie при выходе из системы
Если вы не нашли этот Cookie, перезагрузите страницу. В этом случае сервер повторно аутентифицирует страницу и при необходимости перенаправляет на страницу входа
Вот и все, готово!
Вот моя реализация с использованием ASP.NET. Реализация будет варьироваться в зависимости от серверной технологии, но идея остается прежней.
(на стороне сервера). Создать HTTP Cookie со стороны сервера с скользящим сроком действия
Response.SetCookie(new HttpCookie(“TimeoutCookieName”, "1") { Expires = DateTime.UtcNow.AddMinutes(10) });
//NOTE 10 == Session Timeout. This will be same as your application login session timeout.
(на стороне сервера). Очистить этот файл cookie при выходе из системы
Response.SetCookie(new HttpCookie(“TimeoutCookieName”, "1") { Expires = DateTime.UtcNow});
(на стороне клиента): (следующий скрипт должен существовать сразу после тега BODY)
window.preventBackButton = function () {
try {
if (document && (!document.cookie || document.cookie.indexOf('_tc=1') < 0)) {
window.document.body.style.display = 'none'; window.location = window.location;
}
} catch (e) { }
};
window.preventBackButton(); //Call immediately after body tag
Пожалуйста, найдите реализацию ASP.NET следующим образом:
////C# Helper class - Start
using System;
using System.Web;
namespace MyHelpers {
public static class MyHtmlHelper {
public const string TimeoutCookieName = "_tc";
public static HtmlString PreventBackButtonScript(HttpResponseBase response) {
response.SetCookie(new HttpCookie(TimeoutCookieName, "1") { Expires = DateTime.UtcNow.AddMinutes(10) });
var clientScript = "window.-reventBackButton = function() {
try {
if(document && (!document.cookie || document.cookie.indexOf('" + TimeoutCookieName + "=1') < 0)) {
window.document.body.style.display='none'; window.location = window.location;
}
} catch(e) {}
};
window.preventBackButton();";
return new HtmlString(clientScript);
}
public static void SafeUnSetTimeoutCookie(this HttpResponseBase response) {
response.SetCookie(new HttpCookie(TimeoutCookieName, "0") { Expires = DateTime.UtcNow.AddYears(-5) });
}
}
}
////C# Helper class - End
//Shared\_Layout.cshtml
//Make sure not to include after logout OR login page
<html>
<body>
@MyHelpers.MyHtmlHelper.PreventBackButtonScript(Response)
.
.
<⁄body>
<⁄html>