Problème avec une variable $_SESSION

Problème avec une variable $_SESSION - PHP - Programmation

Marsh Posté le 11-03-2010 à 15:34:16    

Bonjour,
 
Je suis en train de travailler sur un système de captcha, et j'ai un soucis avec la variable $_SESSION contenant le code généré par le script dédié à la génération du captcha, la variable est vide après avoir envoyé la requête au script s'occupant de vérifier si le code saisie est bien le même que celui affiché par l'image du captcha.
 
Je vais pas copier tout mon code car ça ferait long, mais je vais vous le schématiser.
 
 


 
index.html=> POST => page.php => POST => verif.php
                        | affiche
                        > captcha.php (génère le code et affiche une image)
 
 
page.php contient
 
   session_start() ;
   {code vérifiant les $_POST}
   {variables hmtl contenant entre autre
   <img src="captcha.php" alt="image de protection" />
   }
   {code définissant $_SESSION[message] entre autre}
 
 
captcha.php contient
 
   session_start();
   {code générant le captcha dans $code}
   $_SESSION[code_captcha] = $code;  
   {code générant l'image du captcha}
 
verif.php contient
   session_start();
   {code vérifiant si le captcha est bon}
   $code_verif = strtoupper($_POST[verif]) ;
   if ($code_verif != $_SESSION[code_captcha]) {
   $error = 1 ;
   }
   {code d'affichage}
 


 
Les variables $_SESSION définit par la page page.php comme $_SESSION[message] sont disponibles et peuvent être affichées dans verif.php, mais $_SESSION[code_captcha] généré par captcha.php est vide, le fait de confirmer le captcha avec un champs vide le valide donc.
 
Je ne sais pas si cela vient du faire que captcha.php est affiché dans la page comme étant une image, et qu'il faut peut-être utiliser autre chose que session_start () dans le script captcha.php ?
 
Merci d'avance si vous pouvez m'aider, car j'ai un peu de mal à comprendre pourquoi cette variable n'est pas sauvée avec les autres variables $_SESSION.
 
 
 

Reply

Marsh Posté le 11-03-2010 à 15:34:16   

Reply

Marsh Posté le 11-03-2010 à 16:48:10    

Mhhhh, moi le truc qui me chiffonne c'est les $_SESSION[code_captcha] au lieu de $_SESSION['code_captcha'] mais de là à dire que c'est ça qui pose problème quand même pas, il me semble que si les constantes sont indéfinies il les utilise comme des chaînes de caractères.
 
Tu peux toujours essayer de les remplacer mais bon, j'y crois moyen.

Reply

Marsh Posté le 11-03-2010 à 17:57:15    

Tirkyth a écrit :

Mhhhh, moi le truc qui me chiffonne c'est les $_SESSION[code_captcha] au lieu de $_SESSION['code_captcha'] mais de là à dire que c'est ça qui pose problème quand même pas, il me semble que si les constantes sont indéfinies il les utilise comme des chaînes de caractères.
 
Tu peux toujours essayer de les remplacer mais bon, j'y crois moyen.


 
 
Ils y étaient dans un premier temps, mais j'ai finit par les enlever pour facilité le debug avec echo "$_SESSION[truc] <br />" qui posait problème à cause des apostrophes. Ça ne marchait pas mieux avant, et pour les autres variables ça marche très bien sans, donc ce n'est pas ça.
 
J'ai lu sur un topic consacré au captcha la fonction session_register("code" ); je me demande s'il elle serait utile dans le cas présent.

Reply

Marsh Posté le 11-03-2010 à 21:52:02    

Je crois que j'ai compris, une même session ne peut pas être utilisée par deux script différent en même temps. Mais je n'ai pas trouvé comment passer outre cette limitation de php5.

Reply

Marsh Posté le 11-03-2010 à 22:35:30    

J'ai contourné le problème en enregistrant le fichier image plutôt qu'en l'affichant dans le script. Le script captcha.php est ensuite inclue dans page.php avec include(), et la variable est ainsi bien sauvegardé et disponible dans le script suivant.
 
J'ai néanmoins peur que ça pose des problèmes le fait d'enregistrer l'image du captcha sur le disque pour ensuite l'afficher.

Reply

Marsh Posté le 12-03-2010 à 11:05:05    

Goldy a écrit :

Je crois que j'ai compris, une même session ne peut pas être utilisée par deux script différent en même temps. Mais je n'ai pas trouvé comment passer outre cette limitation de php5.


Cette phrase m'intéresse beaucoup, que veux-tu dire par "en même temps" ?

Reply

Marsh Posté le 12-03-2010 à 11:11:53    

Tirkyth a écrit :


Cette phrase m'intéresse beaucoup, que veux-tu dire par "en même temps" ?


 
PHP verrouille l'accès aux données d'une session à un seul script. Donc tant que le premier script n'a pas été entièrement exécuté, ceux qui sont éventuellement appelé dans la page pendant son exécution ne peuvent pas avoir un accès en écriture à la session en cours.
 
Voilà donc pourquoi la variable $_SESSION n'était pas enregistrée.

Reply

Marsh Posté le 28-01-2013 à 17:40:26    

Bonjour,
j'ai exactement le meme probleme que toi.
J'aimerais savoir si tu as trouvé une solution hors enregistrer l'image.
Je te remercie.

Reply

Marsh Posté le 29-01-2013 à 10:18:55    

Pourquoi tu fais un session_start() par page?!
Enfin normalement ça pose pas de souci, mais c'est inutile.
 
Utilise session_write_close() pour forcer la fermeture de ta session en cours de script.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed