Erstaufruf Seite mit CAPTCHA - SESSION Variable leer

PhoenixDH

Erfahrenes Mitglied
Hallo zusammen,

ich verwende ein Kontaktformular mit Cpatcha.
Das ganze System basiert auf der Session.

Hier der Code der aufgerufen wird wenn die Seite geladen wird und der Session Wert für den Cpatcha generiert wird:
Code:
	// Header
	header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");    // Datum aus Vergangenheit
	header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
														 // immer geändert
	header("Cache-Control: no-store, no-cache, must-revalidate");  // HTTP/1.1
	header("Cache-Control: post-check=0, pre-check=0", false);
	header("Pragma: no-cache");                          // HTTP/1.0
	
	// Alle Fehler und Notices anzeigen
	error_reporting(E_ALL);
	
	session_start();
	
	$CAPTCHA_TempString="";
	
	// Zufallsfunktion für Zahlen und Buchstaben
		function GetRandomChar() {
	
	// Zufallszahl generieren
		mt_srand((double)microtime()*1000000);
		$CAPTCHA_RandVal = mt_rand(1,2);
	
	// Buchstabensalat generieren jeh nachdem ob Randval 1 oder 2 ist
		switch ($CAPTCHA_RandVal) {
	    case 1:
	  	  // Zahlen 0-9
	        $CAPTCHA_RandVal = mt_rand(48, 57);
	        break;
	    case 2:
	  	  // Grosse Buchstaben
	        $CAPTCHA_RandVal = mt_rand(65, 90);
	        break;
		}
		
	// Zufallscode ausgeben
		return chr($CAPTCHA_RandVal);
	}
	
	// Zufallscode x-stellig ausgeben
		for ($i = 1; $i <= 6; $i++) {
	       $CAPTCHA_TempString .= GetRandomChar();
	}

	// Text in Sessionvariable speichern
	if (isset($CAPTCHA_TempString)) {
		$_SESSION["CAPTCHA_RndText"] = str_replace('I','E',str_replace('0','3',str_replace('1','S',str_replace('B','F',str_replace('O','P',str_replace('4','A',str_replace('D','K',$CAPTCHA_TempString)))))));
	} else {
		die("Zufallscode konnte nicht generiert werden!");
	}

....

.... HTML Code zur Anzeige ....

Und damit wird das Image angezeigt:
Code:
<img border="0" src="./kontakt/captcha_img.php?PHPSESSID=<?echo session_id();?>&ver=<?echo time();?>" alt="">

DOch leider steht in dem Image immer beim Erstaufruf: Bitte Seite neu laden!

Wenn ich dann weiterschaue in der FIle für das anzeigen oder generieren des Images kommt es daher:
Code:
	// Session initialisieren
	session_start();
	
	include("config.php");
	
	$Schriftart = "captcha_files/truetype_$Schrift.ttf";

	// Benötige Strings überprüfen
	if (isset($_SESSION["CAPTCHA_RndText"])) {
	$CAPTCHA_RandomText = $_SESSION["CAPTCHA_RndText"];
	} else {
		// Fehlermeldung ausgeben
		header ("Content-type: image/png");
		$im = @imagecreatetruecolor(300, 30)
			or die("Cannot Initialize new GD image stream");
		$text_color = imagecolorallocate($im, 233, 14, 91);
		imagestring($im, 10, 5, 7, "Bitte Seite neu laden!", $text_color);
		imagepng($im);
		imagedestroy($im);
	exit();
	}
...

D.h. $_SESSION["CAPTCHA_RndText"] sollte nicht gesetzt sein, aber ich frage mich warum?

Könnt ihr hier vielleicht unterstützen, danke******
Denn ich sehe nicht warum der Wert hier leer sein sollte.
 
Wenn zuerst das PHP-Script geladen wird, in dem das Captcha via HTML-Image-Tag ausgegeben wird, ist der Fall doch klar.

Zuerst rendert PHP das erste Script und gibt es an den Browser. Im ersten Script muss die Session-Variable leer sein. Der Browser stellt fest, das ein Image geladen werden muss und ruft die URL im img-Tag auf. Dort wird das Bild gerendert und die Session wird gefüllt.

Ich nehme mal an, dort wo du im ersten Script "HTML code zur Anzeige" stehen hast, befindet sich ein Formular. Was passiert denn mit der Session-Variable, wenn du das Formular absendest? Sehr wahrscheinlich ist sie dann gefüllt. Und zwar mit dem, was du im Image-Script hinterlegt hast.
 
Zurück