Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/08/2011, 12h09   #1
Invité de passage
 
Homme
Étudiant
Inscription : juillet 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : juillet 2011
Messages : 5
Points : 0
Points : 0
Par défaut Probleme décalage captcha

Bonjour a tous,
voila j'ai codé un système de génération de captcha avec GD et un fichier capcha.php (qui est considéré comme une image .png).
Je fais passer le code par SESSION entre la page capcha.php et inscription.php.
Le problème est que il y a un décalage entre l'image et la variable.
La première fois que l'on charge la page la variable session['capcha'] n'a pas de valeur et une image avec un code apparait.
Mais lorsqu'on recharge le page elle possède la valeur de l'image de la page précédente et il y a une nouvelle image.
D’où vient le problème?
Voici mon code:

capcha.php
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?php
session_start();
 
function nombre()
{
  $chaine = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$nb_caract = 6;
$pass = "";
 
for($u = 1; $u <= $nb_caract; $u++) {
 
    $nb = strlen($chaine);
 
    $nb = mt_rand(0,($nb-1));
 
 
    $pass.=$chaine[$nb];
}
return $pass;
}
 
function image($mot)
{
	$size = 20;
	$marge = 30;
	$font = './face.OTF';
 
	$box = imagettfbbox($size, 0, $font, $mot);
	$largeur = $box[2] - $box[0];
	$hauteur = $box[1] - $box[7];
	$largeur_lettre = round($largeur/strlen($mot));
 
	$img = imagecreate($largeur+$marge, $hauteur+$marge);
	$blanc = imagecolorallocate($img, 255, 255, 255); 
	$noir = imagecolorallocate($img, 0, 0, 0);
 
	for($i = 0; $i < strlen($mot);++$i)
	{
		$l = $mot[$i];
		$angle = mt_rand(-10,10);
		imagettftext($img,$size,$angle,($i*$largeur_lettre)+$marge, $hauteur+mt_rand(0,$marge/2),$noir, $font, $l);	
	}
 
	imagepng($img);
	imagedestroy($img);
}
 
function captcha()
{
    $mot = nombre();
    $_SESSION['capcha'] = $mot;
    image($mot);
}
 
header("Content-type: image/png");
captcha();
?>
inscription.php
Code :
1
2
<img src="images/capcha.php"  alt="capcha" />
<?php $capchareel=$_SESSION['capcha']; echo $capchareel;?>
Merci d'avance pour votre aide
str0ofiy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2011, 16h53   #2
Membre confirmé
 
Avatar de Korri
 
Homme Hugo Vacher
Étudiant
Inscription : mai 2008
Messages : 158
Détails du profil
Informations personnelles :
Nom : Homme Hugo Vacher
Âge : 23
Localisation : Canada

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2008
Messages : 158
Points : 224
Points : 224
Tu à mal compris l'ordre de chargement :
  1. Tu affiche le html
  2. Tu affiche la valeur de $_SESSION
  3. La page est transmise au client
  4. Le client demande à voir l'image
  5. Tu crée l'image et définit le $_SESSION
  6. Le client reçoi l'image

Il est donc normale que en 2, la session définie en 5 ne le soit pas encore.
__________________
  • Quand la discutions est terminée, cliquez sur , Pensez y !
  • Vous voyez un message pertinent et de qualité ? Votez pour ce message !
Korri est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/08/2011, 18h55   #3
Invité de passage
 
Homme
Étudiant
Inscription : juillet 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : juillet 2011
Messages : 5
Points : 0
Points : 0
Je ne comprend pas,
Je créer dans un premier temps la variable mot qui est définit ensuite par $_SESSION['capcha'].
Puis je créer l'image que j'affiche.
Et enfin je recupere le mot dans le $capchareel.
Je vois pas
str0ofiy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2011, 17h22   #4
Invité de passage
 
Homme
Étudiant
Inscription : juillet 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : juillet 2011
Messages : 5
Points : 0
Points : 0
ah oui d'accord, mais dans ce cas il faudrait créer la variable avant et l'envoyé par $_SESSION dans capcha.php ?
str0ofiy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2011, 17h30   #5
Membre confirmé
 
Avatar de Korri
 
Homme Hugo Vacher
Étudiant
Inscription : mai 2008
Messages : 158
Détails du profil
Informations personnelles :
Nom : Homme Hugo Vacher
Âge : 23
Localisation : Canada

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2008
Messages : 158
Points : 224
Points : 224
Désolé j'avais oublié ton message.

Ton système tel qu'il est maintenant fonctionne, seulement tu ne peut pas connaitre le code du Captcha sur la page même ou tu l'affiche, et tu n'en à pas besoin.

Tu définit ta session dans captacha.php, puis tu vérifie dans la page qui reçois les données du formulaire que les données sont bien identiques.

PS: Il existe des services de captcha qui fonctionne très bien aussi, sauf raison spécifique, rien ne sers de réinventer la roue.
__________________
  • Quand la discutions est terminée, cliquez sur , Pensez y !
  • Vous voyez un message pertinent et de qualité ? Votez pour ce message !
Korri est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/08/2011, 19h31   #6
Invité de passage
 
Homme
Étudiant
Inscription : juillet 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : juillet 2011
Messages : 5
Points : 0
Points : 0
J'ai fait un système en JavaScript qui compare les captcha pour voir si l'utilisateur la bien entrée donc si j'en ai besoin sur la même page.
Citation:
"Il existe des services de captcha qui fonctionne très bien aussi, sauf raison spécifique, rien ne sers de réinventer la roue. "
Je sais mais je préfère tout faire moi même pour des raisons d'entrainements ^^
str0ofiy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2011, 16h34   #7
Membre habitué
 
Homme Lucas GAUTHERON
Lycéen
Inscription : décembre 2008
Messages : 106
Détails du profil
Informations personnelles :
Nom : Homme Lucas GAUTHERON

Informations professionnelles :
Activité : Lycéen

Informations forums :
Inscription : décembre 2008
Messages : 106
Points : 145
Points : 145
Si tu veux vérifier le captcha avec JS, utilise Ajax pour interroger un script checkcaptcha.php du genre :
Code :
1
2
3
4
5
6
7
8
9
10
11
 
<?php
session_start();
if(array_key_exists('captcha', $_SESSION) && array_key_exists('captcha', $_GET) && strtolower($_GET['captcha']) == strtolower($_SESSION['captcha']))
{
    echo '1';
}
else
{
    echo '0';
}
Il ne faut pas qu'on puisse récupérer le captcha lui même évidemment, la comparaison doit se faire côté serveur.. Sinon ça rend la protection inutile.
lucas74 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/08/2011, 10h01   #8
Rédacteur/Modérateur
 
Avatar de Thes32
 
Homme
Développeur Web
Inscription : décembre 2006
Messages : 2 335
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2006
Messages : 2 335
Points : 3 774
Points : 3 774
J'ai l'impression que tu veux partager un même captcha avec plusieurs utilisateurs. Est ce cela ?
__________________
Développeur | Zend Certified Engineer

Étapes Pour mieux se servir du forum:
1. Commencez par lire les cours et tutoriels ;
2. Faites une recherche;
3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

Nix>_Rien n'est plus pratique que la théorie
Thes32 est déconnecté   Envoyer un message privé Réponse avec citation 01
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h46.


 
 
 
 
Partenaires

Hébergement Web