Ciao
non so se il titolo in questione sia adeguato al problema che vi voglio sottoporre perchè ancora non ho capito quale sia l'inghippo.
In pratica ho una pagina (form) per l'inserimento di un Captcha, che riceve l'immagine tramite un'altra pagina (Code.php) che utilizza libreira GD. il numero generato viene passato tramite questo codice:
session_start();
$_SESSION['securityCode'] = $code;
Il controllo di esatto inserimento viene poi "processato" da un'altra pagina (result.php).
OK. Adesso al primo avvio della pagina Captcha che io inserisca un codice giusto o errato tutto funziona perfettamente, In pratica se il codice è corretto proseguo con la mia eseguzione, se invece è errato faccio un redirect nuovamente alla pagina Captcha.......e qui arriva il problema, perchè a questo punto qualsiasi cosa io inserisca come codice, sia giusta che sbagliata me la considera sempre come ERRATA.
Ho voluto precisare questa cosa, perchè credo sia dovuto ad una continua memorizzazione della variabile $_SESSION, ma con il debugger non sono in grado di tracciarla perchè dopo la prima eseguzione il debug viene terminato.
Eppure ho distrutto con vari metodi la session (con Unset o con Destroy e, ultimo tra questi nella pagina Result.php (se codice errato) con questo codice:
if (($string == $userstring) && (strlen($string) > 4)) {
header("Location: $success");
exit();
} else {
$string="";
$userstring="";
$_SESSION=array();
header("Location: $failure");
exit();
}
Mi rendo conto che non posso postarvi tutto l'intero codice, ma se vi viene in mente un possibile suggerimento da poter tentare in base a quanto detto, vi ringrazio.
Un saluto
Paolo
EDIT: (per Mario)
Questo è il form:
<form action="result.php" METHOD="POST">
<p><img src="securityCode.php" border="1"> </p>
<p>Per favore inserisci il codice mostrato qui sopra e premi <strong>Submit.</strong></p>
<br>
<input MAXLENGTH=8 SIZE=8 name="userstring" type="text" value="">
<br><br>
<input type="submit" value="Submit">
</p>
</form>
ti metto anche il Resul.php a cui faccio invio
include "settings.php";
session_start();
$string = strtoupper($_SESSION['securityCode']);
$userstring = strtoupper($_POST['userstring']);
Ti ricordo che il codice generato viene passato con:
session_start();
$_SESSION['securityCode'] = $code;
Grazie
if (($string == $userstring) && (strlen($string) > 4)) {
header("Location: $success");
exit();
} else {
$string=""; //prova
$userstring=""; //prova
//$_SESSION=array(); usato per prova
unset($_SESSION['securityCode']);
header("Location: $failure");
exit();
}
?>
Generatore Code
<?php $width = 120; $height = 40; $length = 5; $baseList = '0123456789abcdfghjkmnpqrstvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $code = ""; $counter = 0; $image = @imagecreate($width, $height) or die('Cannot initialize GD!'); for( $i=0; $i<10; $i++ ) { imageline($image, mt_rand(0,$width), mt_rand(0,$height), mt_rand(0,$width), mt_rand(0,$height), imagecolorallocate($image, mt_rand(150,255), mt_rand(150,255), mt_rand(150,255))); } for( $i=0, $x=0; $i<$length; $i++ ) { $actChar = substr($baseList, rand(0, strlen($baseList)-1), 1); $x += 10 + mt_rand(0,10); imagechar($image, mt_rand(3,5), $x, mt_rand(5,20), $actChar, imagecolorallocate($image, mt_rand(0,155), mt_rand(0,155), mt_rand(0,155))); $code .= strtolower($actChar); } session_start(); $_SESSION['securityCode'] = $code; header('Content-Type: image/jpeg'); imagejpeg($image); imagedestroy($image); ?>