Captcha - problem z sesją

0

Witam, poniżej zamieszczam kod generujący captche i przetrzymujący w sesji wartość captchy do porównania

<?php


		session_start();
        $pool = '0123456789abcdefghijklmnopqrstuvwxyz';
        $img_width = 120;
        $img_height = 30;

        if(!isset($str))
		{
			for ($i = 0; $i < 7; $i++){
					$str .= substr($pool, mt_rand(0, strlen($pool) -1), 1);
			}
		}

        
		$_SESSION['captcha'] = $str;

        $im = imagecreate($img_width, $img_height);

        $bg_color        = imagecolorallocate($im,163,163,163);
        $font_color   = imagecolorallocate($im,252,252,252);
        $grid_color   = imagecolorallocate($im,31,0,0);
        $border_color = imagecolorallocate ($im, 174, 174, 174);

        imagefill($im,1,1,$bg_color);

        for($i=0; $i<1600; $i++){

                $rand1 = rand(0,$img_width);
                $rand2 = rand(0,$img_height);
                imageline($im, $rand1, $rand2, $rand1, $rand2, $grid_color);

        }

        $x = rand(5, $img_width/(7/2));

        imagerectangle($im, 0, 0, $img_width-1, $img_height-1, $border_color);

        for($a=0; $a < 7; $a++){

                imagestring($im, 5, $x, rand(6 , $img_height/5), substr($str, $a, 1), $font_color);
                $x += (5*2); #odstęp

        }

        header("Content-type: image/gif");
		
        imagegif($im);
        imagedestroy($im);
?>

Wywołuje captche w taki sposób:

<?PHP
session_start();
?>

<img src="captcha.php">
<?php echo $_SESSION['captcha']; ?>

Problem jest następujący - wartość wyświetlana za pomocą echo różni się od tej generowanej w obrazku.
Zauważyłem, że jest to wartość poprzedniego obrazka. Jak sobie z tym poradzić?

Chyba, że ktoś może polecić lepszy skrypt ?
Potrzebuje prosty skrypt, który mógłbym umieszczać na wielu podstronach, bez zbędnych rejestracji (tak jak to jest w przypadku reCAPTCHA)

edit:
Szperając po guglach dowiedziałem się, że problem leży w podwójnym wykonaniu sesji. Obrazek generowany jest w jednej, a zmienna sesyjna 'captcha' w drugiej. Jak to zrobić inaczej?

0
Andriej napisał(a)

...

Zbyt wcześnie korzystasz z $_SESSION['captcha']. Zanim na komputerze klienta nie odpali się obrazek captcha.php to zmienna będzie nieprawidłowa. Z drugiej strony nie widzę sensu korzystania z tych danych akurat tutaj. To się powinno sprawdzać po wysłaniu formularza.

0

Oczywiście, ale to jest "beta" kod, po co mam wysyłać formularz, skoro wiem jaki będzie efekt?

0

Bo obecnie próbujesz odczytać kod z nieistniejącego obrazka i albo dostajesz pusty $_SESSION['captcha'], albo zawierający poprzedni kod?

0

Tak, już zrozumiałem :)
Znów problemy w teorii:P
Dziękuje

1 użytkowników online, w tym zalogowanych: 0, gości: 1