Question

J'écris une application qui, si l'utilisateur répond, peut renvoyer les mêmes informations et gâcher le flux et l'intégrité des données. Comment puis-je le désactiver pour les utilisateurs avec et sans javascript?

Était-ce utile?

La solution

Ce n'est pas possible, malheureusement. Cependant, considérons le modèle de navigation de vos applications. Utilisez-vous le modèle Post / Redirect / Get PRG? http://fr.wikipedia.org/wiki/Post/Redirect/Get ?

Ce modèle est plus convivial avec le bouton Précédent que le modèle Postback.

Autres conseils

Vous ne devriez pas.

Vous pouvez associer un script à l'événement onbeforeunload d'une page et confirmer avec l'utilisateur que c'est ce qu'il souhaite faire. et vous pouvez aller un peu plus loin et essayer de le désactiver . mais bien sûr, cela ne fonctionnera que pour les utilisateurs sur lesquels javascript est activé. Au lieu de cela, envisagez de réécrire l'application pour ne pas valider les transactions sur chaque page soumise, mais uniquement à la fin du processus.

Je vous encourage vivement à prendre des mesures héroïques pour éviter de casser le bouton de retour, c’est un moyen infaillible d’aliéner vos utilisateurs. Il est même arrivé au numéro 1 sur Les dix erreurs de conception de sites Web de Jacob Neilsen en 1999 .

Peut-être pourriez-vous envisager de poser la question suivante: & "Comment éviter de casser le bouton Précédent pour < insérez votre scénario ici >? &";

Si la réponse de Scott est proche de la cible, envisagez de modifier votre flux selon le modèle PRG. Si c’est autre chose, donnez un peu plus de détails et voyez comment nous pouvons vous aider.

Je suis arrivé avec un petit bidouillage qui désactive le bouton retour en utilisant JavaScript. Je l'ai vérifié sur Chrome 10, Firefox 3.6 et IE9:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<title>Untitled Page</title>
<script type = "text/javascript" >
function changeHashOnLoad() {
     window.location.href += "#";
     setTimeout("changeHashAgain()", "50"); 
}

function changeHashAgain() {
  window.location.href += "1";
}

var storedHash = window.location.hash;
window.setInterval(function () {
    if (window.location.hash != storedHash) {
         window.location.hash = storedHash;
    }
}, 50);


</script>
</head>
<body onload="changeHashOnLoad(); ">
Try to hit back!
</body>
</html>

La meilleure option est de ne pas dépendre de publications (postbacks) pour contrôler le flux, toutefois si vous êtes coincé avec elle (pour le moment)

vous pouvez utiliser quelque chose comme ceci:

  Response.Cache.SetCacheability(HttpCacheability.NoCache);
  Response.Cache.SetExpires(Now.AddSeconds(-1));
  Response.Cache.SetNoStore();
  Response.AppendHeader("Pragma", "no-cache");

Bientôt, vous constaterez que cela ne fonctionnera pas sur tous les navigateurs, mais vous pourrez ensuite introduire une vérification dans votre code telle que:

 if (Page.IsPostBack)
 {
        if (pageIsExpired()){
           Response.Redirect("/Some_error_page.htm");
        }
        else {
           var now = Now;
           Session("TimeStamp") = now.ToString();
           ViewState("TimeStamp") = now.ToString();
        }

  private boolean pageIsExpired()
  {
     if (Session("TimeStamp") == null || ViewState("TimeStamp") == null)
        return false;

     if (Session("TimeStamp") == ViewState("TimeStamp"))
        return true;

        return false;
  }

Cela résoudra le problème dans une certaine mesure, Code non vérifié - uniquement à titre d'exemple.

Il est possible de désactiver le bouton Précédent dans tous les principaux navigateurs. Il utilise simplement des valeurs de hachage pour désactiver complètement le bouton Retour. Il suffit de mettre ces 5 lignes de code dans votre page

 <script>
window.location.hash="no-back-button";
window.location.hash="Again-no-back-button";//for google chrome
window.onhashchange=function(){window.location.hash="no-back-button";}
</script> 

Description détaillée

Tout ce que vous proposez pour désactiver le bouton Précédent peut ne pas arrêter le bouton Précédent dans les futurs navigateurs.

Si le cycle de développement est en fin de cycle, je vous suggère d'essayer les suggestions ci-dessus, mais lorsque vous aurez le temps, structurez votre flux de sorte que le bouton Précédent n'interfère pas avec la logique de votre site. page précédente comme ils s'y attendent.

C’est vrai, vous devez ajouter une validation appropriée pour vous assurer que les données en double ne gâchent pas les choses. Cependant, comme dans mon cas, je ne contrôle pas entièrement les données, car j'utilise une API tierce après mon formulaire. Alors j'ai utilisé cette

history.go(+1);

Ceci enverra l’utilisateur sur le " accusé de réception " qui est censé venir après " paiement " page s'ils tentent de revenir à " paiement " page (donnant juste un paiement par exemple). Utilisez avec parcimonie, bien que

Vous pouvez publier les données de chaque formulaire dans une fenêtre _NEW. Cela désactivera le bouton Précédent sur chaque fenêtre, mais sans JavaScript, il pourrait être difficile de forcer la fermeture de l’ancienne.

4 gars de Rolla ont écrit cet article sur la désactivation du bouton Précédent il y a longtemps (dans une galaxie très éloignée): http://www.4guysfromrolla.com/webtech/111500-1.shtml

J'ai pu accomplir cela en utilisant:

 Response.Cache.SetExpires(DateTime.MinValue);
 Response.Cache.SetNoStore();

Quand j'ai utilisé Response.Cache.SetCacheability (HttpCacheability.NoCache); cela m'a empêché de télécharger des fichiers bureautiques.

Trouver le lien ci-dessous

Désactivez la fonctionnalité du bouton Précédent du navigateur à l'aide de JavaScript dans asp.net | ASP.Net désactiver le bouton de retour du navigateur (à l'aide de javascript)

http: //www.aspdotnet-suresh. com / 2011/11 / disable-browser-back-button.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top