Подтвердить что ты не робот

Вход и выход в систему аутентификации ASP.NET с кнопкой назад

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

У меня есть сборка веб-приложений в asp.net и использование пользовательского поставщика членства для аутентификации и авторизации. Все работает отлично, за исключением случаев, когда пользователь нажимает на ссылку выхода из системы, чтобы выйти из приложения и перенаправляться на титульную страницу по умолчанию, если вы нажмете кнопку BACK BUTTON в своем браузере, она вернется туда, где они были раньше, и данные все равно будут отображаться.

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

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

спасибо

4b9b3361

Ответ 1

Беспокойство об истории браузера и обратной кнопке даст вам головные боли и генитальные бородавки. Для решения этой проблемы есть объекты.

Ваша кнопка выхода/кнопка должна указывать на страницу, содержащую этот код, а также все, что вы хотите.

[vb.net]

Imports System.Web.Security

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
 Handles MyBase.Load
    Session.Abandon()
    FormsAuthentication.SignOut()
End Sub

[С#]

using System.Web.Security;

private void Page_Load(object sender, System.EventArgs e)
{
    // Put user code to initialize the page here
    Session.Abandon();
    FormsAuthentication.SignOut();
}

Код исходит из этой страницы и действителен, но страница сильно зависит от глаз.

Хороший вопрос/ответ о поведении с подставкой можно найти здесь.

Update:

в соответствии с беседой, которую я имею с Мэтью, отключение кэширования на отдельных страницах, которые являются чувствительными или волевыми, может выполняться с помощью кода, например:

Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();

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

Ответ 2

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

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

Ответ 3

Этот код очень полезен

Response.Cache.SetCacheability(HttpCacheability.NoCache);

Положите этот код на событие загрузки, на master pagen в случае, но он работает только для IE, для IE и Firefox я использовал

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();

Ответ 4

Ваш ответ

Обходной путь к этому заключается в том, чтобы добавить следующий код javascript в раздел страницы logout.aspx:

<script type="text/javascript">
 window.history.forward(1);
</script>

Этот код javascript отправит пользователя обратно, если пользователь перейдет на страницу выхода из системы, нажав кнопку "Назад".

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

Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1)); 
Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.Cache.SetNoStore(); 

Ответ 5

Вы можете попробовать использовать свойство HttpResponse.Cache, если это поможет:

Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetValidUntilExpires(false);
Response.Cache.VaryByParams["Category"] = true;

if (Response.Cache.VaryByParams["Category"])
{
//…
}

Или может блокировать кэширование страницы в целом с помощью HttpResponse.CacheControl, но ее устарело в пользу свойства Cache выше:

Response.CacheControl = "No-Cache";

ИЛИ вы действительно можете сходить с ума и сделать все это вручную:

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

Ссылка

Ответ 6

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

Page.Response.Cache.SetCacheability(HttpCacheability.NoCache);

спасибо за ответ в любом случае:)