Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 47 di 56
  • livello intermedio
Indice lezioni

L'Autenticazione

Il codice PHP per gestire l'autenticazione degli utenti nel back-end del blog
Il codice PHP per gestire l'autenticazione degli utenti nel back-end del blog
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() che grazie all'argomento FILTER_SANITIZE_STRING permetterà di filtrare gli input evitando stringhe potenzialmente pericolose per l'applicazione e i dati da essa gestiti;
  • la query di selezione consiste nell'estrazione del valore relativo al campo denominato "username_login" (SELECT username_login) dove i parametri di input sono identici ai valori memorizzati nei campi "username_login" e "password_login" (WHERE username_login = '$username' AND password_login = '$password'); l'operatore di confronto AND consente di introdurre un nuovo criterio di selezione oltre quello già proposto tramite WHERE, essa restituisce TRUE soltanto nel caso in cui entrambi i confronti effettuati producano un risultato positivo.
  • mysql_num_rows() è una funzione nativa di PHP che ha il compito di restituire il numero di righe coinvolte da un risultato per le istruzioni SELECT, accetta come parametro l'esito della query passata a mysql_query() e può essere utilizzata per procedure di controllo; nel caso del codice proposto, per esempio, il numero di righe coinvolte dall'interrogazione non potrà essere uguale a "0", diversamente l'esito del confronto tra gli input inviati e il contenuto della tabella sarebbe negativo e l'autenticazione non avrebbe luogo.
  • Se il controllo effettuato da mysql_num_rows() dovesse restituire "0" allora il login fallirebbe e il browser dell'utente subirà una rindirizzamento alla homepage del blog.
  • Nel caso di esito positivo verrà invece richiamata la funzione estrai() che estrarrà dalla tabella il valore relativo al campo "id_login" e lo utilizzerà per creare un valore di sessione che permetterà di accedere alle altre pagine dell'amministrazione.
  • Il successo della procedura di login determinerà una rindirizzamento alla pagina gestisci.php in cui sarà presente il modulo per l'inserimento dei post.

Ti consigliamo anche