Introduzione
In questo tutorial, esploreremo come implementare un sistema di autenticazione in PHP utilizzando le sessioni. Le sessioni sono uno strumento fondamentale per mantenere lo stato dell´utente tra le diverse pagine di un´applicazione web. Impareremo a gestire l´accesso degli utenti, a creare un modulo di login e a proteggere le pagine riservate. Questo approccio è utile per chi desidera costruire applicazioni web sicure e user-friendly.
Codice completo
Di seguito è riportato un esempio completo di un sistema di autenticazione di base. Il codice include un modulo di login, la gestione delle sessioni e una pagina protetta.
<?php
// Inizializza la sessione
session_start();
// Dati di esempio per l´autenticazione
$users = [
´admin´ => ´password123´,
´user´ => ´mypassword´
];
// Funzione per gestire il login
function login($username, $password) {
global $users;
if (isset($users[$username]) && $users[$username] === $password) {
$_SESSION[´username´] = $username; // Salva l´username nella sessione
return true;
}
return false;
}
// Gestione del logout
if (isset($_GET[´logout´])) {
session_destroy(); // Distrugge la sessione
header(´Location: login.php´); // Reindirizza alla pagina di login
exit;
}
// Verifica se l´utente è già loggato
if (isset($_SESSION[´username´])) {
header(´Location: protected.php´); // Reindirizza alla pagina protetta
exit;
}
// Gestione della richiesta di login
if ($_SERVER[´REQUEST_METHOD´] === ´POST´) {
$username = $_POST[´username´];
$password = $_POST[´password´];
if (login($username, $password)) {
header(´Location: protected.php´); // Reindirizza alla pagina protetta
exit;
} else {
$error = ´Credenziali non valide´;
}
}
?>
<!-- Pagina di login -->
<form method="POST" action="login.php">
<h2>Login</h2>
<?php if (isset($error)) echo "<p style=´color:red´>$error</p>"; ?>
<label for="username">Username:</label>
<input type="text" name="username" required>
<br>
<label for="password">Password:</label>
<input type="password" name="password" required>
<br>
<input type="submit" value="Login">
</form>
Spiegazione
Nel codice sopra, iniziamo con l´avvio della sessione utilizzando session_start(). Abbiamo definito un array di utenti con username e password per simulare un database. La funzione login() verifica se le credenziali fornite corrispondono a quelle memorizzate. Se la verifica ha successo, l´username viene salvato nella sessione.
Se l´utente è già loggato, viene reindirizzato direttamente alla pagina protetta. Se non lo è, viene mostrato un modulo di login. In caso di credenziali errate, viene visualizzato un messaggio di errore.
La gestione del logout è semplice: distruggiamo la sessione e reindirizziamo l´utente alla pagina di login.
Best practice
- Usa HTTPS: Assicurati che la tua applicazione utilizzi HTTPS per proteggere i dati trasmessi, in particolare le credenziali di accesso.
- Hashing delle password: Non memorizzare le password in chiaro. Utilizza funzioni come
password_hash()epassword_verify()per gestire le password in modo sicuro. - Timeout della sessione: Implementa un timeout per le sessioni inattive. Puoi farlo controllando l´ultima attività dell´utente e distruggendo la sessione se è scaduta.
- Controllo degli accessi: Assicurati che le pagine protette controllino sempre se l´utente è loggato prima di consentire l´accesso.
- Protezione CSRF: Implementa misure contro gli attacchi Cross-Site Request Forgery (CSRF) utilizzando token di verifica nei moduli.
Riepilogo
In questo tutorial, abbiamo visto come implementare un sistema di autenticazione in PHP utilizzando le sessioni. Abbiamo creato un modulo di login, gestito le sessioni utente e implementato un sistema di logout. Ricorda di seguire le best practice di sicurezza per proteggere le tue applicazioni e i dati degli utenti.
