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()
  • 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

Ti consigliamo anche