Autenticazione Utente con le Sessioni

Introduzione

In un’applicazione web tradizionale, l’autenticazione degli utenti si basa sul meccanismo di sessione tra il server e il client, ovvero uno spazio di memoria a cui accede il server, spazio di memoria associato al client.
Il collegamento logico / il filo conduttore tra la sequenza di transazioni è l “id di sessione” generato dal webserver, memorizzato nei cookie del browser, ed inviato dal client nei cookies ad ogni richiesta.

Questo articolo analizza i passaggi principali di: login, verifica dello stato autenticato e logout. La descrizione è accompagnata da esempi di codice PHP.

Concetti chiave

Autenticazione: è il processo di controllo delle credenziali utente (username/password). L’autenticazione dell’utente ha successo se viene trovata una corrispondenza tra le credenziali inserite in fase di login con i dati salvati in fase di registrazione.

Autorizzazione: è il controllo dei diritti dell’utente di accedere a determinate risorse.

1. Login

Durante la fase di login, l’utente inserisce le proprie credenziali (nome utente e password) in un form HTML. Il server valida queste credenziali e, in caso di successo, avvia una sessione. Ecco i passaggi principali:

  1. Invio delle credenziali: Le credenziali vengono inviate al server tramite una richiesta HTTP POST.
  2. Validazione delle credenziali: Il server verifica le credenziali confrontandole con i dati memorizzati (es. in un database).
  3. Avvio della sessione: In caso di successo, il server avvia una sessione utilizzando session_start() e memorizza informazioni sull’utente autenticato nella superglobale $_SESSION.
<?php
// Pseudocodice per il login
session_start();

// Validazione delle credenziali
$username = $_POST['username'];
$password = $_POST['password'];

if (validate_credentials($username, $password)) {
    $_SESSION['user'] = [
        'id' => get_user_id($username),
        'username' => $username
    ];
    header('Location: dashboard.php');
    exit;
} else {
    echo 'Credenziali non valide.';
}
?>

2. Verifica dello Stato Autenticato

Ad ogni richiesta HTTP, il server verifica se l’utente è autenticato controllando i dati nella sessione. Questo processo garantisce che solo gli utenti autenticati possano accedere a risorse protette.

<?php
// Pseudocodice per proteggere una pagina
session_start();

if (!isset($_SESSION['user'])) {
    // Reindirizza l'utente alla pagina di login
    header('Location: login.php');
    exit;
}

// L'utente è autenticato, procedi con la logica della pagina
echo 'Benvenuto, ' . htmlspecialchars($_SESSION['user']['username']);
?>

Diagramma uml di sequenza
Diagramma uml di sequenza

3. Logout

Il logout termina la sessione dell’utente eliminando i dati memorizzati e distruggendo l’ID di sessione. Questo passaggio previene ulteriori accessi senza una nuova autenticazione.

<?php
// Pseudocodice per il logout
session_start();

// Elimina i dati della sessione
$_SESSION = [];

// Distrugge la sessione
session_destroy();

// Reindirizza alla pagina di login
header('Location: login.php');
exit;
?>

Considerazioni sulla Sicurezza

  • Abilita session.cookie_secure per trasmettere i cookie solo su connessioni HTTPS.
  • Usa session_regenerate_id() dopo il login per prevenire attacchi di session fixation.
  • Configura session.cookie_httponly per evitare accessi JavaScript ai cookie.