4D - 4E e 5E SIA: Procedura di login e sessione con Php e MySql

Pagina Web con un form di login per l’inserimento delle credenziali dell’utente (email, password).

Si consideri il database db1 su server MySQL con la tabella utenti avente la seguente struttura:

utenti (ID, Cognome, Nome, Email, Telefono, Citta, Provincia, Password)
La pagina Web seguente realizza la procedura di login per l’acquisizione dei dati di un utente (credenziali) e per la sua identificazione.

La pagina HTML presenta la maschera di login e richiama la pagina PHP per il controllo.

Lo script PHP controlla che l’utente sia registrato sul server, fornendo anche un messaggio con l’esito del controllo. In caso positivo fornisce l’accesso alla prima pagina del sito, contenente anche un link per consentire all’utente di disconnettersi (logout).



Lo script seguente, richiamato dalla pagina di login, accede al database db1 sul server e controlla se l’utente è registrato nella tabella utenti: in caso positivo apre la pagina di accesso al sito creando una nuova sessione Web, altrimenti visualizza un messaggio di identificazione non riuscita.

Con il termine sessione si intende un insieme di accessi dello stesso utente a pagine Web diverse. La gestione della sessione consiste essenzialmente nel registrare le informazioni dell’utente, in modo da consentire la navigazione nelle altre pagine del sito senza richiedere ogni volta le credenziali dell’utente. Ogni pagina del sito, al momento del caricamento, controlla che i dati dell’utente siano già registrati in una sessione: in caso negativo, rimanda alla pagina di login. Una sessione termina nel momento in cui l’utente effettua un logout oppure chiude il browser


 

Lo script utilizza due funzioni per la protezione dalla SQL injection, che è presentata nei Contenuti digitali integrativi di questo capitolo.
In particolare:
• la funzione stripslashes rimuove i backslash (\) da una stringa (\’ diventa ‘). I doppi backslash (\\) sono ridotti ad un singolo backslash (\);
• la funzione mysql_real_escape_string aggiunge le sequenza di escape ai caratteri speciali in una stringa in modo che sia utilizzata in modo sicuro nei comandi mysql_query.

Inoltre la password viene crittografata con la funzione md5, applicando l’algoritmo MD5; in questo modo nella tabella del database la password viene registrata non in chiaro, ma come una stringa di 32 cifre esadecimali (128 bit).

Si osservi che, se si vuole crittografare il campo password nella tabella con la funzione MD5, occorre che la lunghezza del campo sia almeno di 32 caratteri. Se la crittografia riguarda una tabella nella quale le password siano state già inserite in chiaro, si può usare la funzione MD5 per aggiornare i valori nel campo password con il seguente comando SQL:

UPDATE utenti SET password = MD5(password);

Il controllo sulla presenza dell’utente nel database viene eseguito tramite il numero delle righe restituite dalla query (mysql_num_rows) che deve essere uguale a 1:


$conta=mysql_num_rows($result);
if($conta==1){
. . . . . . }



Nel caso di esito positivo del controllo, lo script avvia una sessione (session_start) registrando le informazioni dell’utente nella variabile $_SESSION (array associativo).


Inoltre il comando header avente la sintassi generale:


header("Location: URL pagina");


provoca il reindirizzamento a un’altra pagina loginok.php, che potrebbe essere la prima pagina dell’area riservata alla quale possono accedere gli utenti autenticati. Nel caso di esito negativo del controllo sull’identificazione dell’utente, viene visualizzato un messaggio di identificazione non riuscita e l’utente deve tornare alla pagina di login.



Le pagine del sito con accesso riservato devono contenere la scelta per il logout, che attiva i comandi per eliminare le variabili di sessione: 

$_SESSION = array(); 

e per eliminare la sessione stessa: 

session_destroy();


La procedura deve essere aggiornata con la libreria Mysqli.

Fonte originale: 

Commenti