web-dev-qa-db-fra.com

Comment empêcher le bouton de retour du navigateur après la déconnexion?

Comment puis-je arrêter le bouton de retour une fois que l'utilisateur s'est déconnecté? (Le bouton LOGOUT est en page maître) Utiliser des formulaires Web

J'ai quelques pages, la dernière page est la dernière page et après la déconnexion lorsque je clique sur le bouton retour, sa page précédente est affichée. Comment puis-je éviter cela? 

Le code doit être activé uniquement après la déconnexion. L’utilisateur doit pouvoir revenir en arrière n voir la page précédente s’il doit apporter des modifications pendant la connexion.

13
Challa Jyothi

Vous devez définir les en-têtes HTML corrects. Selon ceci ce sont ceux qui fonctionnent sur tous les navigateurs:

Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: 0

Vous pouvez les définir comme ceci:

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

Fonctionne parfaitement même lorsque le bouton de retour est enfoncé dans le navigateur (testé dans crome)

J'ai utilisé une variable de session et j'ai également désactivé le cache

formulaire de connexion page 1(default.aspx) où je collecte l'ID de variable de session 

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

                }

        }

En page 2 bouton de déconnexion 

     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>

ça peut marcher pour vous

0
Chirag Sutariya

Essayez ceci je trouve ce meilleur moyen de prévenir le retour. Vous avez cette solution dans codeproject.

nettoie la valeur de la session lors de la déconnexion avec ces méthodes courantes.

Session.Abandon();
Session.Clear();
Session.RemoveAll();
System.Web.Security.FormsAuthentication.SignOut();
Response.Redirect("frmLogin.aspx", false);

Sur la page ASPX, j'utilise Jquery avec JSON et vérifie la valeur de la session avec 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);
            }
        });
    }

WebMethod LogoutCheck () vérifie la valeur de session du serveur d'applications au moment du chargement du côté client.

J'ai créé cette méthode sur la page frmLogout.aspx comme ceci: 

[WebMethod]
public static int LogoutCheck()
{
   if (HttpContext.Current.Session["user"] == null)
   {
      return 0;
   }
   return 1;
}

Désormais, lorsque l'utilisateur ferme la page, il redirige vers la page de déconnexion, efface et abandonne les valeurs de la session. Désormais, lorsque l'utilisateur clique sur le bouton précédent du navigateur, le côté client est uniquement chargé et pendant cette période, le WebMethod CheckingSession () est déclenché dans JQuery et vérifie la valeur de session LogoutCheck () WebMethod. Comme la session est nulle, la méthode renvoie zéro et la page est redirigée à nouveau dans la page de connexion. Je n'ai donc pas besoin d'effacer le cache ni d'effacer l'historique du navigateur de l'utilisateur. 

0
Raghubar

Essayé beaucoup de solutions mais seulement celle ci-dessous a fonctionné. Ajouté ci-dessous le script Java dans la page de déconnexion. Toutes les autres solutions fonctionneront bien dans les navigateurs autres que IE

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

Cette approche ne fonctionnera qu'avec les sites MVC

C'est l'approche que j'utilise

Ajoutez le filtre suivant à votre FilterConfig (supposons que vous utilisiez MVC)

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

Décorez maintenant les méthodes d'action que les utilisateurs peuvent utiliser sans être connectés avec

 [AllowAnonymous]

Assurez-vous de décorer vos méthodes de connexion et d'enregistrement.

Désormais, lorsqu'un utilisateur cliquera en arrière (en supposant que la page s'actualise), il sera invité à se connecter à nouveau ... Je n'autorise pas la mise en cache de mes pages, ce qui force l'actualisation au bouton Précédent.

J'espère que ça vous aidera un peu

0
KevDevMan

Je sais que c'est un vieux fil, mais quelqu'un pourrait l'aider. Vous pouvez empêcher le bouton de retour en utilisant l'événement javascript change.

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

Vous pouvez visiter ici pour le tutoriel complet

0
CET