ma variable de session n'est pas initialisé après retour

WRInaute impliqué
Bonjour,

Je ne comprend pas la chose suivante :

Le visiteur valide un formulaire et arrive sur une page qui confirme l'enregistrement. Cette page insère les données dans la base.
Après le script d'insertion j'initialise une variable comme suit :
Code:
$_SESSION['antiMarcheArriere']='1';

Le but est que si le gars utilise fait un retour avec le navigateur, la page précédente n'affiche plus le formulaire tel qu'il était mais les conditions d'inscription.

Pour cela je fais comme suit:
Code:
if($_SESSION[$antiMarcheArriere]!=1)
{
on insère le formulaire
;}
else {require('condition-inscription.php');}

Et bien avec ça le formulaire se réinsère quand même. Si je fais
Code:
!isset($_SESSION[$antiMarcheArriere])
Pour le test, alors c'est pareil.




Donc ? Pourquoi ma variable de session n'est pas transmise à la page précédente lorsque l'on fait un retour du navigateur ?
 
WRInaute discret
Quand l'utilisateur fait retour, la page qui est affichée ne vient pas du serveur web mais du cache du navigateur de l'utilisateur.

Le serveur n'ayant pas interprété cette page il ne fait pas le test sur la variable de session.

Je pense qu'il faut mettre ton test de la variable de session tout en haut du code de la 2ème page qui insert les données en base.

Après l'insertion en BDD il faut mettre une variable en session :
Code:
$_SESSION["insertion"] = "ok";

Et avant l'insertion il faut regarder que l'insertion n'a pas déjà été faite :
Code:
if ($_SESSION["insertion"] != "ok"){
//insertion en BDD
}
 
WRInaute impliqué
Intéressante réponse, merci Reglysse !


Quand l'utilisateur fait retour, la page qui est affichée ne vient pas du serveur web mais du cache du navigateur de l'utilisateur.

J'y vois plus clair.

Le serveur n'ayant pas interprété cette page il ne fait pas le test sur la variable de session.

Il y avait une erreur dans mon test de variable (oubli des ' ') : je l'ai corrigé et j'obtiens le message suivant :

Avertissement : expiration du délai pour cette page La page requise a été créée en utilisant les informations fournies dans un formulaire. Cette page n'est plus disponible. Par sécurité, Internet Explorer ne renvoie pas automatiquement les informations vous concernant.

Pour envoyer vos informations à nouveau et afficher cette page Web, cliquez sur le bouton Actualiser.

En soit c'est déjà bien mais je voudrais comprendre le processus, au vue de ce que tu me dis. Pourquoi la simple initialisation d'une variable de session déclenche une erreur de ce type sur la page censé tester si cette variable existe, en faisant retour ?



Pour le reste le mieux c'est que je reprenne le tout en insérant le scrit d'insertion par une condition dans la même page que celles du script de confirmation. Comme cela en faisant retour, le gars sera obligé de tomber sur la page d'acceptation des CGU.

Z'êtes d'accord ?
 
WRInaute discret
Je ne sais pas pourquoi tu as cette erreur maintenant, hypothèse :
Comme maintenant tu utilises une session dans la page le serveur web doit envoyer une information au navigateur comme quoi la page expire tout de suite.

Sinon je suis ok avec toi pour la suite, le test d'insertion et l'insertion doit être dans la même page.
Code:
if ($_SESSION["deja_inséré"] != "OK"){
 INSERTION
 $_SESSION["deja_inséré"] = "OK";
}
 
Discussions similaires
Haut