IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Probleme décalage captcha


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 10
    Points : 7
    Points
    7
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <img src="images/capcha.php"  alt="capcha" />
    <?php $capchareel=$_SESSION['capcha']; echo $capchareel;?>
    Merci d'avance pour votre aide

  2. #2
    Membre actif Avatar de Korri
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 158
    Points : 232
    Points
    232
    Par défaut
    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.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    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

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    ah oui d'accord, mais dans ce cas il faudrait créer la variable avant et l'envoyé par $_SESSION dans capcha.php ?

  5. #5
    Membre actif Avatar de Korri
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 158
    Points : 232
    Points
    232
    Par défaut
    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.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    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.
    "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 ^^

  7. #7
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2008
    Messages : 106
    Points : 152
    Points
    152
    Par défaut
    Si tu veux vérifier le captcha avec JS, utilise Ajax pour interroger un script checkcaptcha.php du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  8. #8
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    J'ai l'impression que tu veux partager un même captcha avec plusieurs utilisateurs. Est ce cela ?

Discussions similaires

  1. probleme dans captcha
    Par windows2056 dans le forum Langage
    Réponses: 15
    Dernier message: 26/05/2011, 14h50
  2. Probleme verification captcha
    Par lelapinrusse dans le forum Langage
    Réponses: 1
    Dernier message: 29/06/2009, 14h32
  3. Probleme : décalage du curseur (voir image)
    Par manu f dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 31/05/2009, 13h37
  4. probleme décalage contenu css
    Par calitom dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 07/09/2007, 12h18
  5. Probleme décalage à cause de usemap
    Par mitch99 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 14/07/2006, 13h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo