Modérateur PHPfrance |
10684 Messages
20 juil. 2008, 16:15
hop hop hop... on se calme avec ajax à toutes les sauces ou la configuration du navigateur sur les postes client !!
D'abord comprendre le problème : Pour ouvrir la page spécifiée dans l'url, l'utilisateur a envoyé des données au serveur via la méthode POST. Afin de ré-accéder à cette même page (après un "retour" ou une "actualisation") le navigateur doit renvoyer ces données et en informe l'utilisateur. En effet, lorsqu'on vient de payer un truc en ligne, on a pas forcément envie de se voir débité 2 fois parce qu'on a actualisé la page. Du coup le navigateur demande confirmation, à savoir, l'utilisateur veut-il renvoyer les données ?
En GET, lorsque tu actualises une page, toutes les données sont déjà spécifiées dans l'url. Tu demandes donc juste l'ouverture d'une adresse spécifique en indiquant au préalable dans son chemin les données nécessaires à son affichage (tu es donc sensé les voir, les connaitre et les maitriser, contrairement à celles transmises par POST)
Ca, c'est le comportement normal de tout navigateur digne de ce nom
Il existe plusieurs solutions pour éviter cela, mais la plus commune et la plus propre - sans se lancer dans des développements à outrance (à coup d'ajax) ou des demandes de paramétrages spécifiques à ses visiteurs - c'est celle d'
AB, ou plus exactement le pattern "PRG" : "Post-Redirect-Get"
L'idée est qu'à la fin du traitement des données soumises en POST, le serveur redirige l'utilisateur en GET avec un header. Cette redirection étant transparente pour le navigateur (et l'utilisateur), l'actualisation de la page par l'utilisateur a pour effet de recharger la nouvelle page ouverte en GET (au lieu d'une page ouverte en post) et la fonction retour du navigateur le renvoi sur le formulaire, avant l'envoi des données en POST. Ainsi, à aucun moment l'utilisateur ne renvoi de données en POST, et le navigateur ne lui demande pas de confirmation.
Dans ton cas, il faut donc après l'autentification de ton visiteur (et enregistrement en session des données qui vont bien), que tu le rediriges automatiquement avec un header vers ta page index.php (en spécifiant éventuellement en GET les paramètres nécessaires à l'ouverture de la page) et le tour est joué

Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...