Link copiato negli appunti
La procedura di autenticazione per il back-end del piccolo blog engine d'esempio si articolerà in tre fasi:
- inserimento in un modulo dei dati richiesti per l'autenticazione (username e password);
- confronto tra i dati inviati dal modulo e il contenuto della tabella richiamata in query;
- esito del confronto: in caso positivo (i dati inviati tramite il modulo corrispondono a quelli memorizzati in tabella) si avrà accesso all'amministrazione, diversamente sarà eseguita una procedura di rindirizzamento verso la homepage del sito.
Di seguito viene presentato il codice necessario per il login, compreso di form per l'invio dei dati di autenticazione, i commenti aiuteranno nella comprensione dei diversi passaggi ma verranno fornite successivamente ulteriori informazioni sul suo funzionamento:
<?php // inizializzazione della sessione session_start(); // se la sessione di autenticazione // è già impostata non sarà necessario effettuare il login // e il browser verrà reindirizzato alla pagina di scrittura dei post if (isset($_SESSION['login'])) { // reindirizzamento alla homepage in caso di login mancato header("Location: gestisci.php"); } // controllo sul parametro d'invio if(isset($_POST['submit']) && (trim($_POST['submit']) == "Login")) { // controllo sui parametri di autenticazione inviati if( !isset($_POST['username']) || $_POST['username']=="" ) { echo "Attenzione, inserire la username."; } elseif( !isset($_POST['password']) || $_POST['password'] =="") { echo "Attenzione, inserire la password."; }else{ // validazione dei parametri tramite filtro per le stringhe $username = trim(filter_var($_POST['username'], FILTER_SANITIZE_STRING)); $password = trim(filter_var($_POST['password'], FILTER_SANITIZE_STRING)); $password = sha1($password); // inclusione del file della classe include "funzioni_mysql.php"; // istanza della classe $data = new MysqlClass(); // chiamata alla funzione di connessione $data->connetti(); // interrogazione della tabella $auth = $data->query("SELECT id_login FROM login WHERE username_login = '$username' AND password_login = '$password'"); // controllo sul risultato dell'interrogazione if(mysql_num_rows($auth)==0) { // reindirizzamento alla homepage in caso di insuccesso header("Location: index.php"); }else{ // chiamata alla funzione per l'estrazione dei dati $res = $data->estrai($auth); // creazione del valore di sessione $_SESSION['login'] = $res-> id_login; // disconnessione da MySQL $data->disconnetti(); // reindirizzamento alla pagina di amministrazione in caso di successo header("Location: gestisci.php"); } } }else{ // form per l'autenticazione ?> <h1>Accesso all'amministrazione:</h1> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> Username:<br /> <input name="username" type="text"><br /> Password:<br /> <input name="password" type="password" size="20"><br /> <input name="submit" type="submit" value="Login"> </form> <? } ?>
Commentando il funzionamento del codice proposto è possibile fornire la seguente descrizione:
- viene lanciata una sessione che sarà aperta solo nel caso in cui il processo di autenticazione dovesse avere successo;
- viene effettuato un controllo sull'invio dei dati tramite modulo, se uno dei due campi di input non dovesse essere formulato si riceverà una notifica relativa all'omissione;
- nel caso siano stati inviati tutti e due i parametri richiesti, questi verranno passati alla funzione
filter_var()
- la query di selezione consiste nell'estrazione del valore relativo al campo denominato "username_login" (
SELECT username_login
WHERE username_login = '$username' AND password_login = '$password'
mysql_num_rows()
mysql_query()
- Se il controllo effettuato da
mysql_num_rows()
- Nel caso di esito positivo verrà invece richiamata la funzione
estrai()
- Il successo della procedura di login determinerà una rindirizzamento alla pagina gestisci.php