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.
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:
- Invio delle credenziali: Le credenziali vengono inviate al server tramite una richiesta HTTP POST.
- Validazione delle credenziali: Il server verifica le credenziali confrontandole con i dati memorizzati (es. in un database).
- 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']);
?>

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_secureper trasmettere i cookie solo su connessioni HTTPS. - Usa
session_regenerate_id()dopo il login per prevenire attacchi di session fixation. - Configura
session.cookie_httponlyper evitare accessi JavaScript ai cookie.