Supponendo che nella pagina di verifica apri la sessione con session_start() come nella pagina in cui la crei... direi che hai lo stesso mio problema che mi era capitato qualche mese fa...
Per ovviare, io generavo il codice del captcha nella pagina che contiene il form di controllo, passando allo script php che genera l'immagine, il codice da printare criptato...
Del tipo:
codice:
[img]immagine.php?cod=4448af13fa1dg48h486gd[/img]
e nel file immagine.php che conterrà lo script con le gd che creano il captcha, ci sarà una funzione che decripta quel codice passato in GET...
Così la sessione col codice tu non la setti più nel file che genera il captcha, ma la setti nel file dove sta il form di controllo subito dopo averlo creato... e così vedrai che lo prende!
Esempio pratico:
form.php
Codice PHP:
session_start(); //apri sessione
/////////////////
// crei il codice
/////////////////
$_SESSION['codice'] = $codice;
$ccod = cripta($codice); // cripti il cod
echo "[img]immagine.php?cod=".$ccod."[/img]";
immagine.php
Codice PHP:
$ccod = $_GET['cod'];
$decod = decripta($ccod);
//////
// fai apparire il captcha con le gd
//////
controllo.php
Codice PHP:
$postcode = $_POST['cod'];
$sescod = $_SESSION['codice'];
if($postcode != $sescode)
die("Errore");
L'ho scritto al volo, prova e dimmi, ciao!