Как отключить кнопку возврата в браузере при выходе пользователя из asp.net с #
Наша проблема в том, что мы можем очистить сеанс при выходе из системы.
Но если пользователь нажимает кнопку «Назад», он может просмотреть все предыдущие экраны.
Но преимущество состоит в том, что одним щелчком на любой из таких ранее просматриваемых страниц, мы возвращаем пользователя на страницу входа в систему, что мы и сделали. Но наше требование состоит в том, что мы не должны позволять пользователю переходить на предыдущую страницу просмотра.
Ответов (7)7
напишите этот код на главной странице в событии загрузки страницы
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
Response.Cache.SetNoStore();
и напишите этот код на странице входа в раздел заголовка
<script type="text/javascript">
window.history.forward(-1);
</script>
Для страниц ASP.NET вы можете использовать Response.CacheControl для управления хранением страницы в кэше пользователей. Другие языки веб-разработки будут использовать нечто подобное.
Вы можете использовать стиль Outlook Web Access и просто заставить JavaScript закрыть текущее окно / вкладку.
Кроме того, вы можете убедиться, что ваша страница «выхода» является постбэком. Это заставит пользователя, нажимающего кнопку «Назад» в большинстве браузеров, повторить попытку обратной передачи, после чего вы сможете обнаружить, что они больше не вошли в систему, и перенаправить их обратно на страницу входа.
Изменить: кто-то еще упомянул Response.Redirect. На самом деле вы можете сделать так, чтобы ваша ссылка «выхода» переходила на страницу, которая выполняет перенаправление, и ВСЕГДА перенаправляет на вторую «целевую страницу». Если пользователь нажимает «Назад», он снова перейдет на перенаправление и вернет их туда, где они начали.
Невозможно предотвратить историю браузера, поэтому важно использовать несколько методов вместе и не планировать, чтобы пользователь «не возвращался назад», чтобы обеспечить безопасность вашего приложения.
Вы не можете "отключить" кнопку возврата. Я видел множество «трюков», которые могут очистить заднюю историю, но они ненадежны и не работают от браузера к браузеру или даже от версии браузера к версии браузера.
Как говорили другие, правильный метод - это сделать кеш недействительным, а также проверить на стороне сервера, что сеанс больше не действителен, если они попытаются повторно отправить данные. Кроме того, Response.Redirect работает лучше, чем обратная передача, поскольку это вызывает получение, а не публикацию.
Это решение, которое я нашел в Coding Solutions
на главной странице
protected void Page_Load(object sender, EventArgs e)
{
Response.ClearHeaders();
Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1
Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.1
Response.AppendHeader("Keep-Alive", "timeout=3, max=993"); // HTTP 1.1
Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.1
}
Контроль LoginStatus
protected void LoginStatusUser_LoggedOut(object sender, EventArgs e)
{
Session.Abandon();
FormsAuthentication.SignOut();
}