8768 sujets

Développement web côté serveur, CMS

Bonjour

Je cherche les "bonnes pratiques" pour détecter qu'une page a été réaffichée (F5) ou chargée par navigation dans l'historique.
Dans le temps j'avais bidouillé quelque chose à partir d'un fichier temporaire, ce qui doit aussi pouvoir se faire par session. Je suppose qu'il doit y avoir des solutions plus ou moins standard?
Merci de vos conseils
Merci de ta réponse

C'est effectivement très intéressant, c'est une API dont j'ignorais l'existence et qui va sans doute me servir dans d'autres cas, mais je ne vois pas le rapport avec mon problème, ce qui veut sans doute dire que je l'ai mal expliqué.

En fait c'est le problème récurrent des soumissions multiples de formulaires qui font qu'on achète plusieurs fois la même chose en ligne sans l'avoir voulu.
Dans mon cas particulier, ce n'est pas dramatique, mais il y a des effets de bord indésirables que j'aimerais éviter.

Ma page php fait les opérations suivantes:
a) on la soumet "normalement" à partir d'une certaine page en mettant un paramètre dans un formulaire
b)cela lance l'affichage d'une deuxième page qui contient rogramme PHP va chercher sur le site un fichier dont le nom est déduit du paramètre en question et en affiche le contenu dans un formulaire
c) l'utilisateur effectue des modifications et active la fonction "mettre à jour"
d) cela lance une 3ème page PHP qui met à jour le contenu du fichier

Ce qui s'est passé, c'est que l'utilisateur est revenu en arrière par l'historique (backspace), c'est à dire qu'il est passé de d) à b) et il a à nouveau affiché, non pas la page modifiée, mais la page telle qu'elle était lors de la première passe, avec des effets de bord désagréables.

Je voudrais à tout le moins détecter cette situation et envoyer un message d'avertissement à l'utilisateur.
Comment faire?
Zelena a écrit :
Je ne suis pas sûre que cela vous convienne mais il y a :
Manipuler l'historique du navigateur.

Je pense surtout au chapitre sur l'événement popstate.

Smiley smile

Je l'ai lu, je n'y comprends rien. Smiley rolleyes
Est-il possible de vider l'historique? il suffirait que la dernière étape vide l'historique, on ne pourrait pas relancer l'étape précédente par un backspace.
Modérateur
Plutôt que de manipuler l'historique, la bonne pratique pour éviter les resoumissions de formulaires est d'utiliser Post-redirect-get.

Cela permet de faire «sauter» le POST de l'historique :

- Envoi d'une requête POST sur «monurl»
- Traitement des données du POST
- Redirection sur «monurl» en GET

De sorte l'entrée d'historique sera le GET et non le POST.