Originariamente inviato da seokey
e no... session_start() lo inserisco dopo la verifica dei dati da POST...
La situazione strana è che si riesce ad accedere alla pagina di destinazione con i dati username e password corretti ma viene presentata due volte la schermata login !
Spiacente ma session_start() va inserito SEMPRE ad inizio script per evitare comportamenti anomali dello script stesso.
L'unica cosa che conviene anteporgli è il comando INI_SET() con il session_savepath per cambiare a runtime la cartella di salvataggio dei file di sessione.
Il mitico MTX_Maurizio (mio amico di forum, peraltro) ha consigliato bene oly1982 in quanto utilizzando una cartella interna del proprio sito, rispetto alla TMP di default dei server web, è un buon metodo per evitare il session hijacking, cioè la tecnica di hacking spesso usata per "entrare" da una specie di porta posteriore nei siti condivisi in un server.
Anche perché, se magari il vostro sito è bello sicuro, ma poi le sessioni vengono salvate in una cartella comune ad altri siti assolutamente non sicuri, tutti i vostri controlli di sicurezza saltano con poco sforzo!
A tal proposito, vi consiglio di leggere la Guida alla Sicurezza in PHP, dove la tecnica è spiegata a dovere.
Viene spiegato per bene anche come utilizzare a dovere le sessioni per evitare quanto più possibile gli hacking.

Il mio consiglio, poi, è quello di evitare di salvare tutti i dati sensibili di una procedura di login nella sessione.
Preferisco creare un riferimento univoco all'utente (magari semplicemente creando un MD5 del suo username oppure del microtime al momento del login) e salvarlo sia nel DB sia nella sessione.
Con questo metodo, per esempio, si riesce a fare un doppio controllo sulle credenziali dell'utente.

Insomma... leggiti bene la guida perché ti apre gli occhi.... anche sull'uso del session_regenrate_id().