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

Как я могу остановить кнопку "Назад" после выхода пользователя из системы? (Кнопка 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, метод возвращает ноль, а страница перенаправляется снова на странице входа. Таким образом, мне не нужно очищать кеш или очищать историю браузера пользователя.