Implementazione di un Sistema di Autenticazione con Sessioni in PHP

by theArchitect
SHARE
Implementazione di un Sistema di Autenticazione con Sessioni in PHP
© Guida-HTML5.it

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() e password_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.

Approfondisci con risorse ufficiali

SHARE