Signori ho capito il problema seguitemi perche è complicato e temo inoltre che sarò preso per pazzo...
In pratica il problema è la funzione rand() che mi genera il codice di 6 cifre della captcha.
La funzione rand() si appoggia, per il suo funzionamento, al tempo.. Per fare una prova facciamo che il codice della captcha sia il valore restituito da time(), il che è praticamente la stessa cosa..
In pratica a grandi linee:
Codice:
$numero_random = time(); //il numero che comparirà sulla captcha sarà così un valore espresso in secondi.
$_SESSION['valore_nascosto'] = $numero_random; //Questa è la variabile di sessione
genera_e_stampa_immagine_captcha($numero_random); // Questa funzione mi stampa l'immagine captcha, con stampato sopra le cifre di time()
<input campo text che inserisce l'utente />
e quindi il submit
echo $_SESSION['valore_nascosto']; // questo lo metto per osservare il valore di sessione che alla pressione di SUBMIT dovrà essere uguale al valore inserito dall'utente nel campo di testo.
In pratica il tutto funzionerebbe perfettamente, il problema è che la pagina ha una URL modificata con htaccess, questo (suppongo) faccia perdere al server del tempo prezioso o qualcosa di simile.
Questo lo vedo per il fatto che dopo il submit, al rigenerarsi della pagina, se stampo il valore della variabile di sessione, è PIU LUNGO, di poco, rispetto al tempo che avevo visto prima di premere il submit.
In sostanza il valore della variabile di sessione viene STRANAMENTE cambiato nel frattempo e viene mandata alla pagina successiva un valore diverso e piu lungo!
I punti salienti di tutto questo discorso, per chiarezza, sono:
- Se non uso htaccess funziona perfettamente. La pagina in cui si trova il form DEVE essere la URL originale.
- Se $numero_random = "CICCIO" (anziche un valore generato da time() ) funziona perfettamente, con o senza htaccess...
- Se passo il valore, anziche con la variabile di sessione, con un semplice campo hidden, FUNZIONA PERFETTAMENTE anche con htaccess!!
Ho attualmente risolto il problema passando il valore tramite parametro hidden nel form. Era la soluzione che volevo evitare ma per il momento inevitabile. Se avete qualche suggerimento su come creare una captcha sicura sono qui, altrimenti tenete a mente che può verificarsi questo problema..