web-dev-qa-db-fra.com

Comment désactiver le bouton Précédent du navigateur uniquement après la déconnexion dans mvc3.net

J'utilise FormsAuthentication pour userlogin . J'ai un problème après que l'utilisateur s'est déconnecté avec succès. Le bouton Précédent est un navigateur qui permet à l'utilisateur d'afficher les pages . J'ai essayé d'utiliser javascript.

 <script type = "text/javascript" >
        function preventBack() { window.history.forward(1); }
        setTimeout("preventBack()", 0);
        window.onunload = function () { null };
</script>

Mais le bouton de retour est complètement désactivé . Cela a fonctionné, je ne veux pas désactiver la fonctionnalité du bouton de retour lorsque l’utilisateur est connecté. Je veux que mon utilisateur LOGGED IN utilise le bouton de retour du navigateur normalement. Mais une fois qu'il a choisi de se déconnecter, il n'est plus autorisé à voir le contenu en appuyant sur Retour. J'ai aussi essayé d'utiliser

Session.Abandon();
 Response.Cache.SetCacheability(HttpCacheability.NoCache);
 Response.Cache.SetExpires(DateTime.Now);

Mais cela ne fonctionne pas non plus. Comment puis-je résoudre ce problème?

9
S.p

Vous pouvez effacer l'historique du navigateur lorsque l'utilisateur se déconnecte:

var url = window.location.href;
window.history.go(-window.history.length);
window.location.href = url;

Cependant, cela ne serait pas particulièrement robuste - il repose sur le javascript, il ne fonctionnerait pas sur plusieurs onglets et ne servirait qu'à ennuyer l'utilisateur. IMO, le mieux est de définir les en-têtes de cache appropriés, de sorte que le navigateur ne mette pas en cache les pages que vous avez 'connectées' via un NoCacheAttribute correctement appliqué:

public class NoCacheAttribute : ActionFilterAttribute
{  
  public override void OnResultExecuting(ResultExecutingContext filterContext)
  {
      filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
      filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false);
      filterContext.HttpContext.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
      filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
      filterContext.HttpContext.Response.Cache.SetNoStore();

      base.OnResultExecuting(filterContext);
  }
}
17
Rich O'Kelly

Utilisez ce code dans la page HTML sur laquelle vous devez contrôler le bouton Précédent.

$().ready(function() {
    if(document.referrer != 'http://localhost:8181/'){ 
        history.pushState(null, null, 'login');
        window.addEventListener('popstate', function () {
            history.pushState(null, null, 'login');
        });
    }
});

Ce code bloquera l'événement du bouton de retour. La condition if est d'autoriser le bouton Précédent si la page précédente est ' http: // localhost: 8181/ '. Le bouton Précédent ne fonctionnera pas si la page précédente n'est pas ' http: // localhost: 8181/ '. Si vous devez bloquer toutes les pages précédentes, évitez la condition if. Les instructions history.pushState remplaceront l’URL de la barre d’adresse du navigateur pour «se connecter». Je vous recommande donc de changer le 'login' avec votre URL de page. 

Avantages de cette méthode: -

  1. Pas besoin de contrôler le cache.
  2. Nous pourrions autoriser l'événement de bouton de retour pour les pages précédentes spécifiées et bloquer le reste.

En espérant que ma réponse aidera quelqu'un.

7
Arjun Ajith

Désactiver le bouton Précédent n’est pas un bon moyen de répondre à vos besoins. Au lieu de cela, vous pouvez ajouter les trois balises suivantes dans votre fichier html, qui se charge de vider le cache.

<META Http-Equiv="Cache-Control" Content="no-cache">
<META Http-Equiv="Pragma" Content="no-cache">
<META Http-Equiv="Expires" Content="0">
5
surendran

Le moyen le plus simple que j'ai trouvé est d'utiliser OutputCache Attribute

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public class HomeController  : Controller
{
}
3
Ashwini Verma
 <script language="JavaScript" type="text/javascript">
    window.history.forward();              
 </script> 
1
shafi7468

Veuillez passer à travers l'article http://www.aspdotnet-suresh.com/2011/11/disable-browser-back-button.html . J'ai utilisé la fonction javacript fournie par l'auteur dans ma page de mise en page pour éviter les problèmes de bouton de retour, car je dois donner accès à certaines pages à tous les visiteurs de mon site Web. 

Cette solution a fonctionné pour moi dans IE 11 et dans la version 43.0.2357.130 de Chrome, m.

J'espère que cela t'aides.

0
alj
var url = window.history.forward();
window.history.go(-window.history.length);
0
Poornachander K