Autenticazione di base con le sessioni
Autore: Fabio Di Matteo
Ultima revisione: 30/04/2010
Realizzeremo una classe (un prototipo di base) da includere in ogni pagina che possa controllare l'avvenuta autenticazione o meno dell'utente su un dabase mysql. L'utilizzo della classe sara' molto semplice in quanto dispone in questa versione base di soli 2 metodi (senza costruttore per il momento).
Esempio di utilizzo
La classe dovra' essere utilizzata in un qualunque nostro script come segue:
test.php
<?php //Avvia una autenticazione basata sulle sessioni. @include_once("auth.php"); $Login = new Login(); $Login->LoginSession(); // viene eseguito solo se l'autenticazione e' andata a buon fine. echo' <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Login</title> </head> <body> <br><br><br><br><div align="center"><b>Se sei qui sei autenticato!</b><br><br> <a href="logout.php" ><u>logout</u></a> </div> </body> </html>'; ?>
Come si puo' notare il codice per l'autenticazione sta tutto qui:
@include_once("auth.php"); $Login = new Login(); $Login->LoginSession();
La nostra classe
Modificare la variabile $sql secondo le proprie esigenze.
auth.php
<?php include("mysqldb.php"); session_start(); class Login { function LoginSession() { $AuthErrorMessage='<div align="center"><font color="#FF0000">Login errato</font><br></div>'; $db = new mysqldb; $db->connetti(); $sql="select user, pass from tbl_tecnici where user='".$_SESSION["php_auth_user"]. "' and pass='".$_SESSION["php_auth_pass"]."'"; if (!$db->esegui($sql)) echo'<font color="#FF0000">Errore nella query</font><br>'; if ($db->righe()!=0) { //Se sta qui e' autenticato $Error=""; $db->disconnetti(); return ; }else{ if (!isset($_POST["login"]) ) { $this->MakeHtmlForm($Error); }else{ $sql="select user, pass from tbl_tecnici where user='".$_POST["user"]. "' and pass='".$_POST["pass"]."'"; if (!$db->esegui($sql)) echo'<font color="#FF0000">Errore nella query</font><br>'; //Scrivo i valori del nome utente e della password su variabili di sessione $_SESSION["php_auth_user"]=$_POST["user"] ; $_SESSION["php_auth_pass"]=md5($_POST["pass"]); //autentico con le variabili prese dal form $sql="select user, pass from tbl_tecnici where user='".$_POST["user"]. "' and pass='".md5($_POST["pass"])."'"; if (!$db->esegui($sql)) echo'<font color="#FF0000">Errore nella query</font><br>'; if ($db->righe()!=0) { //Se sta qui e' autenticato, ed esce dalla funzione auth(); $db->disconnetti(); return ; }else{ // credenziali sbagliate $Error=$AuthErrorMessage; $this->MakeHtmlForm($Error); $db->disconnetti(); } } exit(1); } } function MakeHtmlForm($Error) { //Disegno il form per l'autenticazione echo'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Login</title> <style type="text/css"> body { font-size: 0.9em; font-family: Geneva, Arial, Helvetica, sans-serif; } label { width: 4em; float: left; text-align: right; margin-right: 0.5em; display: block } .submit input { margin-left: 4.5em; } input { color: #535353; background: #FFE284; border: 1px solid #535353 } .submit input { color: #000; background: #FFE284; border: 2px outset #d7b9c9 } fieldset { border: 1px solid #FFA20C; width: 20em } legend { color: #fff; background: #FFa20c; border: 1px solid #535353; padding: 2px 6px } </style> </head> <body>'; echo $Error; echo '<div align="center"><br><br><br><br><br><form action="'.$_SERVER["SCRIPT_NAME"].'" method="post"> <fieldset> <legend>Autenticazione</legend> <p><label for="name">Utente</label><input id="user" type="text" name="user"></p> <p><label for="pass">Password</label><input id="pass" type="password" name="pass"></p> <p><input id="login" type="submit" name="login" value="login"></p> </fieldset> </form> </div> </body> </html> '; } }//fine classe ?>
N.B.
Come si puo' notare dall'istruzione include(“mysqldb.php”); ,presente nella prima riga della classe, usiamo anche un'ulteriore classe per interagire agevolmente con Mysql. La classe database di Gianluca Giusti (http://www.urcanet.it/brdp/php_manual/html/brdp9.html#title56) . La classe originale e' contenuta in un file di nome db.php, io ho rinominato il file in mysqldb.php ed il costruttore e il nome della classe in mysqldb
Per personalizzare graficamente il form html per l'inserimento di nome utente e password e' sufficiente andare a modificare il solo metodo MakeHtmlForm() .
Realizzare la pagina per il logout
Per realizzare la pagina che faccia il logout e' sufficiente distruggere la sessione con il seguente codice:
logout.php
<?php //le sole istruzioni necessarie per distruggere la sessione session_start(); session_destroy(); //l'html che vogliamo compaia dopo il logout. echo' <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Login</title> </head> <body> <br><br><br><br><div align="center">Logout effettuato correttamente <a href="test.php" ><u>fai di nuovo il login</u></a></div> </body> </html>';
Traccia: » Benvenuto ! » Autenticazione di base con le sessioni
