it-swarm.com.ru

Как запретить браузеру кнопку возврата после выхода из системы?

Как я могу остановить кнопку «Назад» после выхода пользователя из системы? (Кнопка ВЫХОД на главной странице) Использование веб-форм

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

Код должен срабатывать только после выхода из системы. Пользователь должен иметь возможность вернуться назад и увидеть предыдущую страницу, если он должен внести какие-либо изменения во время входа в систему.

13
Challa Jyothi

Вы должны установить правильные заголовки 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");
19
Patrick Hofman

Отлично работает, даже когда в браузере нажата кнопка «назад» (проверено в crome)

Я использовал переменную сеанса, а также отключил кэш

страница 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)
        } 
0
Bhuvanesh
function preventBack(){window.history.forward();}
  setTimeout("preventBack()", 0);
  window.onunload=function(){null};
0
Jero
<script>
  function preventBack(){window.history.forward();}
  setTimeout("preventBack()", 0);
  window.onunload=function(){null};
</script>

это может работать для вас

0
Chirag Sutariya

Попробуйте это, я считаю, это лучший способ предотвратить спину. Получил это решение в codeproject.

очистите значение сеанса во время выхода из системы с помощью этих распространенных методов.

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;
}

Теперь, когда пользователь выходит из страницы, он перенаправляет на страницу выхода из системы и очищает и отменяет значения сеанса. Теперь, когда пользователь нажимает кнопку «Назад» браузера, клиентская сторона только загружается, и в этот период WebMethod CheckingSession () запускается в JQuery и проверяет значение сеанса LogoutCheck () WebMethod. Поскольку сеанс равен нулю, метод возвращает ноль, и страница снова перенаправляется на страницу входа. Поэтому мне не нужно очищать кеш или очищать историю браузера пользователя. 

0
Raghubar

Перепробовал множество решений, но сработало только нижеследующее. Добавленный ниже Java-скрипт на странице выхода. Все остальные решения будут отлично работать в браузерах, отличных от IE

window.onunload = function() {
                window.location.href = "<%=request.getContextPath()%>/logout.jsp";
            };
0
Renosh

Этот подход будет работать только с сайтами MVC

Это подход, который я использую

Добавьте следующий фильтр в свой FilterConfig (Предположим, вы используете MVC)

 filters.Add(new System.Web.Mvc.AuthorizeAttribute());

Теперь украсьте методы действий, которые пользователи могут использовать, не входя в систему с помощью

 [AllowAnonymous]

Обязательно украсьте свой логин и зарегистрируйте методы.

Теперь, когда пользователь нажимает кнопку «назад» (при условии, что страница обновляется), ему будет предложено снова войти в систему…. Я не разрешаю кэшировать свои страницы, что приводит к необходимости обновления кнопки «Назад».

Надеюсь, это вам немного поможет

0
KevDevMan

Я знаю, что это старая тема, но кто-то может помочь. Вы можете предотвратить нажатие кнопки «Назад» с помощью изменения события 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>

Вы можете посетить здесь для полного урока

0
CET