autenticazione in sessione con php e mysql

Quando devo gestire il login in un’area di amministrazione utilizzo mettere i dati in sessione, e, ad ogni pagina, controllo la coerenza dei dati in sessione con quelli del database.

Questo mi permette di mettere sotto protezione diverse pagine semplicemente utilizzando la chiamata alla funzione di controllo, che, se fallisce, redireziona verso la pagina di login.

Qualcuno mi ha contestato questo metodo, perchè lascio troppo lavoro al server, ma per l’utilizzo che ne faccio (poche decine di utenti al massimo) è un problema che non si pone.

La vera pecca del codice che sto per scrivere è che utilizza la password in chiaro sul db (non codificato in base64 per esempio)

Allora, innanzitutto la pagina di login, che creo nuova e la chiamo, appunto, login.php:

/******************************/

<form action=”index.php” method=”post” name=”login” id=”login”>
<p align=”center”>Username<br>
<input name=”username” type=”text” id=”username”>
</p>
<p align=”center”>Password<br>
<input name=”password” type=”password” id=”password”>
</p>
<p align=”center”>
<input name=”Entra” type=”submit” id=”Entra” value=”Entra”>
</p>
</form>

/******************************/

Poi creo e riempio la tabella utenti sul db mysql:

Il campo “permessi” ouò essere usato per gestire diversi livelli di autenticazione (editore, amministratore…)

/******************************/

CREATE TABLE `utenti` (
`id_utente` int(10) NOT NULL auto_increment,
`nome` varchar(255) NOT NULL default ”,
`cognome` varchar(255) NOT NULL default ”,
`username` varchar(255) NOT NULL default ”,
`password` varchar(255) NOT NULL default ”,
`permessi` int(10) NOT NULL default ‘0’,
`mail` varchar(100) NOT NULL,
`contatti` text NOT NULL,
`attivo` int(2) NOT NULL,
PRIMARY KEY (`id_utente`)
) TYPE=MyISAM PACK_KEYS=0 AUTO_INCREMENT=1;
INSERT INTO `utenti` (`id_utente`, `nome`, `cognome`, `username`, `password`, `permessi`, `mail`, `attivo`) VALUES
(1, ‘nomeadmin’, ‘passwordadmin’, ‘admin’, ‘admin’, 2, ‘webgrafia@gmail.com’, 1);

/********************************/

Poi creo il file auth.php che includo prima di ogni cosa (almeno prima di stampare alcunchè a video):

/********************************/

<?
session_start();
// per uscire dalla sessione
if($_GET[‘azione’]==”esci”){
session_unset();
session_destroy();
}
// controllo permessi
if(!isset($_SESSION[‘permessi’])){
if(isset($_POST[‘username’])){
$query = “SELECT * FROM `utenti` WHERE username='”.$_POST[‘username’].”‘ AND password = ‘”.$_POST[‘password’].”‘”;
$result=mysql_query($query);
if($row=mysql_fetch_array($result)){
if($row[‘attivo’]){
$_SESSION[‘permessi’]=$row[‘permessi’];
$_SESSION[‘id_utente’]=$row[‘id_utente’];
$_SESSION[‘nome’]=$row[‘nome’];
$_SESSION[‘cognome’]=$row[‘cognome’];
}else{
echo ” Utente non attivo “;
include(‘login.php’);
exit;
}
}else{
echo ” Username e password errati”;
include(‘login.php’);
exit;
}
}else{
echo ” Autenticati prima di accedere alla pagina”;
include(‘login.php’);
exit;
}
}
?>

/******************************/
E poi… basta, ogni tentativo di accesso non autorizzato viene rigettato sulla pagina di login

One thought on “autenticazione in sessione con php e mysql

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *