Problème variable SESSION captcha
victoires
Messages postés
141
Statut
Membre
-
Atropa Messages postés 2051 Statut Membre -
Atropa Messages postés 2051 Statut Membre -
Bonjour,
J'ai un captcha dans un formulaire et quand j'essaye de récupérer la variable SESSION qui contient le code captcha, ça me donne toujours la valeur du code captche précédente. voilà mon code
script qui génère le captcha :
script formulaire :
quand je fais
ça me retourne toujours valeur précédente du captcha
Merci pour votre aide
Bonne journée
J'ai un captcha dans un formulaire et quand j'essaye de récupérer la variable SESSION qui contient le code captcha, ça me donne toujours la valeur du code captche précédente. voilà mon code
script qui génère le captcha :
<?php
// On crée la session avant tout
session_start();
// On définit la configuration :
$nbr_chiffres = 6; // Nombre de chiffres qui formeront le nombre
// Là, on définit le header de la page pour la transformer en image
header ("Content-type: image/png");
// Là, on crée notre image
$_img = imagecreatefrompng('fond_verif_img.png');
// On définit maintenant les couleurs
// Couleur de fond :
$arriere_plan = imagecolorallocate($_img, 0, 0, 0); // Au cas où on n'utiliserait pas d'image de fond, on utilise cette couleur-là.
// Autres couleurs :
$avant_plan = imagecolorallocate($_img, 255, 255, 255); // Couleur des chiffres
##### Ici on crée la variable qui contiendra le nombre aléatoire #####
$i = 0;
while($i < $nbr_chiffres) {
$chiffre = mt_rand(0, 9); // On génère le nombre aléatoire
$chiffres[$i] = $chiffre;
$i++;
}
$nombre = null;
// On explore le tableau $chiffres afin d'y afficher toutes les entrées qui s'y trouvent
foreach ($chiffres as $caractere) {
$nombre .= $caractere;
}
##### On a fini de créer le nombre aléatoire, on le rentre maintenant dans une variable de session #####
$_SESSION['aleat_nbr'] = $nombre;
// On détruit les variables inutiles :
unset($chiffre);
unset($i);
unset($caractere);
unset($chiffres);
imagestring($_img, 5, 18, 8, $nombre, $avant_plan);
imagepng($_img);
?>
script formulaire :
<input name="secure" type="text" size="10"> <img src="verif_code_gen.php" alt="Code de vérification" />
quand je fais
print_r($_SESSION);
ça me retourne toujours valeur précédente du captcha
Merci pour votre aide
Bonne journée
1 réponse
-
bonjour,
c'est normale vu que tu génère ton nombre après l'affichage du formulaire c'est a la réceptiondu formulaire qu'il faut que tu vérifie le captcha pas quand il est généré
sinon je ne comprend pas pourquoi tu fais autant de foucle pour générer ton nombre
$nombre = ''; for($i=0;$i < $nbr_chiffres,$i++) $nombre.= mt_rand(0, 9); // On génère le nombre aléatoire $_SESSION['aleat_nbr'] = $nombre;
reviens au même-
par contre si tu ne déforme pas la police ou que tu ne met pas de parasite ce sera facile de deviner le captcha automatiquement et il ne servira a rien
c'est certain que c'est moins pratique pour l'utilisateur mais a quoi bon en mettre un si il ne sert a rien. il existe nombre de logiciel et de code pour lire les textes dans les images
du coup le script pour casser le captcha n'est pas compliqué a faire si la police n'est pas déformé et/ou parasité -
-
-
logiquement pour la valeur c'est bon vu que l'image est généré avant que le javascript soit envoyé mais ca dépend comment tu le vérifie aussi. fait voir ton code javascript
pour déformer il y a différentes façon de faire.
déjà il faut utiliser une police perso (trouvé sur dafont par exemple)
et la libraire gd permet de le faire
https://www.php.net/manual/fr/book.image.php -
je n'ai pas réussi à récupérer la varibale SESSION en javascript don j'ai passer sa valeur en input hidden dans le formulaire
<input type="hidden" name="captcha" value="<?=$_SESSION['captcha']?>" />
puis en js j'ai fais dans une fonction que j'appel onSubmit :if (document.form.secure.value != document.form_entrep.captcha.value) { alert ("Error captcha !"); return false; }else { return true; }
est ce que c'est possible de récupérer une variable de SESSION en js ?
j'ai fais car sinon l'utlisateur doit remplir tout de nouveau si le captch est incorrect donc j'aimerais faire la validation avant d'aller à la page confirmation ?
Merci encore
-