8791 sujets

Développement web côté serveur, CMS

Bonsoir,

Je but sur une valeur de session à récupérer dans fichier inclus dans un autre fichier lui-même inclus.
Autrement dit :
captcha.php=>inclus dans=>inscription.php=>inclus dans=>index.php

captcha.php est un script php qui génère une image. Je voudrais récupérer sa valeur de session pour la comparer avec celle saisie dans le formulaire. Mais ça ne marche pas.
Ca ne vient pas du script car j'ai fait un essaie avec une session toto et je ne récupère pas non plus sa velur.

Est-ce vous auriez une idée ?

Merci à vous tous

Vincent
Modifié par dryzd (25 Mar 2010 - 08:27)
Poste ton code, ça nous aidera à mieux voir où peut se situer ton problème.

Voici cependant quelques pistes :

- Assure toi que les sessions sont activés (autrement dit, test sur un fichier simple)
- Essaie de tester sur les différentes étapes, pour voir à quel moment le problème survient.
Modifié par bgy (25 Mar 2010 - 10:21)
Salut,

bgy a écrit :
Poste ton code, ça nous aidera à mieux voir ou peu se situer ton problème
+1

Sinon bien souvent les problèmes de sessions viennent d'un oubli de session_start();
Merci de vos réponses Smiley cligne

J'ai mis une valeur de session dès le début du fichier captcha juste après le session_start() et la valeur ne remonte pas jusqu'à index.

Captcha.php :

session_start();
$_SESSION["popo"]="popo";
/* ////////////////////
	INITIALISATION
//////////////////// */

/* Démarrage d'une session qui va nous permettre de stocker la valeur à recopier. */
session_start(); // session_start() se place toujours avant toute sortie vers la page web

/* Chemin absolu vers le dossier */
if ( !defined('ABSPATH') ) define('ABSPATH', dirname(__FILE__) . '/');

/*
Création d'une fonction pour générer la chaîne aléatoire à recopier (sans cryptage) :
- strlen() retourne la taille de la chaine en paramètre
- mt_rand(a, b) génère un nombre aléatoire entre a et b compris : cette fonction est plus rapide que rand() de la bibliothèque standard
- $chars{0} retourne le premier caractère de la chaîne $chars, $chars{1} le deuxième ...
*/
function getCode($length) {
	$chars = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ'; // Certains caractères ont été enlevés car ils prêtent à confusion
	$rand_str = '';
	for ($i=0; $i<$length; $i++) {
		$rand_str .= $chars{ mt_rand( 0, strlen($chars)-1 ) };
	}
	return $rand_str;
}

/* Stockage de la chaîne aléatoire de 5 caractères obtenue */
$theCode = getCode(5);

/* Cryptage de la chaine avec md5() avant de la stocker dans la variable de session $_SESSION['captcha'] de la session en cours.
C'est à cette variable qu'on va comparer le code entré par l'utilsateur dans le formulaire. */
$_SESSION['captcha'] = md5($theCode);

/* Afin de traiter les caractères séparément, on les stocke un par un dans des variables. */
$char1 = substr($theCode,0,1);
$char2 = substr($theCode,1,1);
$char3 = substr($theCode,2,1);
$char4 = substr($theCode,3,1);
$char5 = substr($theCode,4,1);

/*
glob() retourne un tableau répertoriant les fichiers du dossier 'fonts', ayant l'extension .ttf ( pas .TTF ! ).
Vous pouvez donc ajouter autant de polices TrueType que vous désirez, en veillant à les renommer.
*/
$fonts = glob('fonts/*.ttf');

/* //////////////////////////////
	TRAITEMENT DE L'IMAGE
////////////////////////////// */

/*
imagecreatefrompng() crée une nouvelle image à partir d'un fichier PNG.
Cette nouvelle $image va être ensuite modifiée avant l'affichage.
 */
$image = imagecreatefrompng('interface/captcha.png');

/*
imagecolorallocate() retourne un identifiant de couleur.
On définit les couleurs RVB qu'on va utiliser pour nos polices et on les stocke dans le tableau $colors[].
Vous pouvez ajouter autant de couleurs que vous voulez.
*/
$colors=array (	imagecolorallocate($image, 131,154,255),
				imagecolorallocate($image, 89,186,255),
				imagecolorallocate($image, 155,190,214),
				imagecolorallocate($image, 255,128,234),
				imagecolorallocate($image, 255,123,123) );

/* Création d'une petite fonction qui retourne une VALEUR aléatoire du tableau reçu en paramètre. */
function random_captcha($tab) {
	return $tab[array_rand($tab)];
}

/*
Mise en forme de chacun des caractères et placement sur l'image.
imagettftext(image, taille police, inclinaison, coordonnée X, coordonnée Y, couleur, police, texte) écrit le texte sur l'image.
*/
imagettftext($image, 20, -5, 0, 37, random_captcha($colors), ABSPATH .'/'. random_captcha($fonts), $char1);
imagettftext($image, 20, 5, 37, 37, random_captcha($colors), ABSPATH .'/'. random_captcha($fonts), $char2);
imagettftext($image, 20, -5, 55, 37, random_captcha($colors), ABSPATH .'/'. random_captcha($fonts), $char3);
imagettftext($image, 20, 5, 100, 37, random_captcha($colors), ABSPATH .'/'. random_captcha($fonts), $char4);
imagettftext($image, 20, -5, 120, 37, random_captcha($colors), ABSPATH .'/'. random_captcha($fonts), $char5);

/* //////////////////////////////
	FIN => ENVOI DE L'IMAGE
////////////////////////////// */

/*
Comme c'est le fichier image.php et non captcha.png qui va être appelé,
on envoie un en-tête HTTP au navigateur via header() pour lui indiquer
que image.php est bien une image au format PNG.
*/
header('Content-Type: image/png');

/* .. et on envoie notre image PNG au navigateur. */
imagepng($image);

/* L'image ayant été envoyée, on libère toute la mémoire qui lui est associée via imagedestroy(). */
imagedestroy($image);



Les autres fichiers sont des includes.

Vous auriez d'autres idées ?
RESOLU !

J'avais un
$_SESSION = array();
		session_destroy();
qui se promenait dans un autre include.

Forcément .......

Désolé pour le dérangement !

Vincent