Как предотвратить выход из браузера после выхода из системы?
Как я могу остановить кнопку "Назад" после выхода пользователя из системы?
(Кнопка LOGOUT находится на главной странице)
Использование веб-форм
У меня мало страниц, последняя страница - последняя страница и после выхода из системы, когда я нажимаю кнопку назад, показывает предыдущую страницу. Как я могу избежать этого. Помогите мне с кодом
Код должен запускаться только после LOGOUT. Пользователь должен иметь возможность вернуться назад на предыдущую страницу, если он должен внести какие-либо изменения во время входа в систему.
Ответы
Ответ 1
Вы должны установить правильные заголовки HTML. Согласно этим, это те, которые работают во всех браузерах:
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: 0
Вы можете установить их так:
HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache, no-store, must-revalidate");
HttpContext.Current.Response.AddHeader("Pragma", "no-cache");
HttpContext.Current.Response.AddHeader("Expires", "0");
Ответ 2
function preventBack(){window.history.forward();}
setTimeout("preventBack()", 0);
window.onunload=function(){null};
Ответ 3
<script>
function preventBack(){window.history.forward();}
setTimeout("preventBack()", 0);
window.onunload=function(){null};
</script>
он может работать для вас
Ответ 4
Этот подход будет работать только с сайтами MVC
Это подход, который я использую
Добавьте в фильтр FilterConfig следующий фильтр (предположим, что вы используете MVC)
filters.Add(new System.Web.Mvc.AuthorizeAttribute());
Теперь украсьте методы действий, которые пользователи могут использовать, не войдя в систему с помощью
[AllowAnonymous]
Обязательно украсьте свои методы входа и регистрации.
Теперь, когда пользователь щелкает назад (при условии, что страница обновляется), их попросят снова войти в систему.
Я не разрешаю кэшировать мои страницы для принудительного обновления на задней панели.
Надеюсь, это поможет вам немного
Ответ 5
Прекрасно работает даже при нажатии кнопки "Назад" в браузере (проверено на crome)
Я использовал переменную сеанса, а также отключил кеш
page 1 (default.aspx), где я собираю идентификатор переменной сеанса
Session["id"] = TextBox1.Text;// just the username</pre>
page 2(Default2.aspx) in page load
protected void Page_Load(object sender, EventArgs e)
{
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.Now.AddDays(-1));
Response.Cache.SetNoStore();
if (Session["id"] == null)
{
Response.Redirect("Default.aspx");// redirects to page1(default.aspx)
}
else
{
Label1.Text = (string)Session["id"];//just display user name in label
}
}
На странице 2 выйдите из системы
protected void Button1_Click(object sender, EventArgs e)
{
Session["id"] = null;
Response.Redirect("/WebSite5/Default.aspx");//redirects to page1(default.aspx)
}
Ответ 6
Пробовал много решений, но только один из них был разработан. Добавлено ниже java script на странице выхода. Все остальные решения будут отлично работать в браузерах, отличных от IE
window.onunload = function() {
window.location.href = "<%=request.getContextPath()%>/logout.jsp";
};
Ответ 7
Я знаю, что это старый поток, но кто-то может это помочь. Вы можете предотвратить обратную кнопку, используя изменение javascript события windows.hash.
<script>
var history_api = typeof history.pushState !== 'undefined';
if (location.hash == '#no-back') {
if (history_api) history.pushState(null, '', '#stay')
else location.hash = '#stay'
window.onhashchange = function () {
if (location.hash == '#no-back') {
alert('Action cannot be done!');
if (history_api) history.pushState(null, '', '#stay')
else location.hash = '#stay'
}
}
}
</script>
Ответ 8
Попробуйте это, я найду этот лучший способ предотвратить возвращение. Получил это решение в кодепроекте.
очистить значение сеанса при выходе из системы с помощью этих общих методов.
Session.Abandon();
Session.Clear();
Session.RemoveAll();
System.Web.Security.FormsAuthentication.SignOut();
Response.Redirect("frmLogin.aspx", false);
На странице ASPX я использую JQuery с JSON и проверяю значение Session с помощью LogoutCheck() WebMethod.
<script type="text/javascript">
$(document).ready(function () {
CheckingSeassion();
});
function CheckingSeassion() {
$.ajax({
type: "POST",
url: "frmLogout.aspx/LogoutCheck",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
if (response.d == 0) {
window.location = '<%= BaseURL %>' + "frmLogin.aspx";
}
},
failure: function (msg) {
alert(msg);
}
});
}
LogoutCheck() WebMethod проверяет значение сеанса с сервера приложений на момент загрузки на стороне клиента.
Я создал этот метод на странице frmLogout.aspx следующим образом:
[WebMethod]
public static int LogoutCheck()
{
if (HttpContext.Current.Session["user"] == null)
{
return 0;
}
return 1;
}
Теперь, когда пользователь выходит из страницы, он перенаправляет на страницу выхода и очищает и оставляет значения сеанса. Теперь, когда пользователь нажимает кнопку "Назад" браузера, клиентская сторона загружается только, и в этот период запускается CheckingSession() WebMethod в JQuery, и он проверяет значение сеанса LogoutCheck() WebMethod. Поскольку сеанс имеет значение null, метод возвращает ноль, а страница перенаправляется снова на странице входа. Таким образом, мне не нужно очищать кеш или очищать историю браузера пользователя.