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>';

Navigazione

..::FreeMediaLab::..


   Indice wiki
   Home Wiki

   

   



Donazioni

Tools personali