Effettuare un' autenticazione di login Creazione di uno script lato server per assegnare ad un utente l'accesso ad una sezione riservata, privilegiata comporta: 1. inserimento dei dati dell'utente in un form 2. confronto con i dati degli utenti autorizzati all'accesso alla sezione, che si trovano generalmente in una tabella nel db sul server. Nella tabella degli utenti "privilegiati" dovranno essere presenti le credenziali username e password. Fondamentale sarà la richiesta di username e password; se uno dei due dati risulterà sbagliato il sistema segnalerà l'errore, ma non dirà quale dei due campi è errato. la password verrà inserita in forma crittografata md5() per PHP. Per tale applicazione si realizzano due pagine • login.php per l'autenticazione o uso della tecnica postback (mette insieme form di inserimento e codice php in una unica pagina dinamica) o è strutturata in tre if sequenziali che controllano verifica se si è in logout cioè se si è verificata la volontà di uscire. In tal caso vengono cancellate tutte le variabili di sessione e richiamata la pagina iniziale. verifica se i dati inseriti sono errati verifica su nomeUtente e password ricevuti cioè se sono già stati riempiti dall'utente a questo punto si ha la connessione al db e la ricerca In caso contrario, se non siamo loggati visualizziamo la pagina di login (form) • riservata.php mostra l'accesso alla sezione riservata LOGIN.PHP <?php session_start(); //funzione che rende attive le variabili di sessione if(isset($_GET['logout']) && $_GET['logout']==1) //Verifica se Logout { $_SESSION=array(); //Reset di tutte la variabili di sessione session_destroy(); //Eliminazione della sessione header("Location: login.php"); //Richiamo la pagina di login exit; //Termine dello script } if (isset($_GET['errno']) && $_GET['errno']==1) //Verifico se dati inseriti errati { echo "<B>Utente o password sconosciuti</B><BR>"; } if(isset($_POST['utente']) && isset($_POST['pwd'])) //Verifica postback su nome utente e password ricevuti { //connessione al database inserendo come parametri //l'indirizzo del server, l'utente e la password del DBMS $db = mysql_connect("localhost","root","") or die ("Non riesco a creare la connessione"); mysql_select_db("utenti") or die ("Non trovo il DB"); //selezione database utenti $sql="SELECT nome_utente,password FROM users WHERE "; //creazione stringa di SQL $sql.="nome_utente='".$_POST['utente']."' AND password='".$_POST['pwd']."';"; echo " ".$sql."<br>"; //esecuzione query. Il risultato è nella recordset $ris $ris = mysql_query($sql) or die ("Query fallita!"); $trovato=false; //ciclo che legge il recordset con la funzione mysql_fetch_array //quando non ci sono più righe $riga vale false while ($riga = mysql_fetch_array($ris)) { //Salvo nelle var di sessione i dati rintracciati dal database $_SESSION['user']=$riga['nome_utente']; $_SESSION['pwd']=$riga['password']; $trovato=true; } //rilascio connessione mysql_close(); //Verifica se utente è stato trovato, quindi se dati di sessione validi if ($trovato) { //Richiamo la pagina riservata header("Location: riservata.php"); } else { //Richiamo la stessa pagina se dati inseriti errati header("Location: ".$_SERVER['PHP_SELF']."?errno=1"); } } else { //Se non siamo loggati, visualizzazione pagina di login echo "<FORM METHOD=POST ACTION='".$_SERVER['PHP_SELF']."'> username:<INPUT TYPE=TEXT SIZE=20 NAME=utente><BR> password:<INPUT TYPE=PASSWORD SIZE=20 NAME=pwd><BR> <INPUT TYPE=SUBMIT NAME=SUBMIT VALUE=LOGIN><BR>"; echo "</FORM>"; } ?> RISERVATA.PHP <?php session_start(); //Verifica se dati di sessione attivi e sono corretti if (isset($_SESSION['user']) && isset($_SESSION['pwd'])) { //verifico se esistono nel database (per maggiore sicurezza) $login_user=$_SESSION['user']; $login_pwd=$_SESSION['pwd']; //Ricerco nuovamente i dari di sessione nel database: solo per //scongiurare eventuali attacchi hacker //connessione al database inserendo come parametri //l'indirizzo del server, l'utente e la password del DBMS $db = mysql_connect("localhost","root","") or die ("Non riesco a creare la connessione"); //selezione database utenti mysql_select_db("utenti") or die ("Non trovo il DB"); //creazione stringa di SQL $sql="SELECT nome_utente,password FROM users WHERE "; $sql.="nome_utente='".$login_user."' AND password='".$login_pwd."';"; //esecuzione query. Il risultato è nella recordset $ris $ris = mysql_query($sql) or die ("Query fallita!"); $trovato=false; //ciclo che legge il recordset con la funzione mysql_fetch_array //quando non ci sono più righe $riga vale false while ($riga = mysql_fetch_array($ris)) { $utente=$riga['nome_utente']; $trovato=true; } //rilascio connessione mysql_close(); //Verifica se utente è stato trovato, quindi se dati di sessione validi if ($trovato) { //Stampa dati di pagina di benvenuto echo " Benvenuto: <B>".$utente."<BR>"; echo "<HR>I tuoi dati sono stati riconosciuti validi<HR>"; echo "QUESTA PAGINA E RISERVATA A TE<BR>"; echo "<A HREF='login.php?logout=1'>logout</A>"; } else { //Se non è vero significa che i dati di sessione sono maligni //Reset di tutte la variabili di sessione $_SESSION=array(); //Eliminazione della sessione session_destroy(); //Richiamo la pagina di login header("Location: login.php?errno=1"); } } else { //Richiamo la pagina di login header("Location: login.php?errno=1"); } ?>