📘 Chapitre 5 – Sécuriser la navigation avec les sessions

1. 🎯 Objectif pédagogique

Mettre en place une navigation sécurisée en PHP en utilisant les sessions pour contrôler l’accès aux pages protégées et éviter les usages non autorisés.

2. 📚 Concepts abordés

  • Vérification de l’authentification via $_SESSION
  • Redirection vers une page de connexion si l’utilisateur n’est pas authentifié
  • Fonction session_regenerate_id() pour prévenir le vol de session
  • Déconnexion sécurisée avec session_unset() et session_destroy()
  • Protection contre l’accès direct aux pages sensibles

3. 🧠 Explication théorique

Pour protéger certaines pages, il faut vérifier si un utilisateur est connecté avant d’afficher le contenu. Exemple :

session_start();
if (!isset($_SESSION['user'])) {
    header('Location: login.php');
    exit;
}

session_regenerate_id() est utile après la connexion pour limiter les attaques par fixation de session.

4. 🛠 Tutoriel pratique

Résumé du travail : Créer un mini-système d’accès sécurisé avec login et page protégée.

Arborescence projet :

projet_php/
 ├── login.php
 ├── dashboard.php
 └── logout.php

Étape 1 : Page de connexion (login.php)

<?php
session_start();
if ($_SERVER["REQUEST_METHOD"] === "POST") {
    $nom = $_POST['nom'] ?? '';
    $motdepasse = $_POST['motdepasse'] ?? '';

    if ($nom === "admin" && $motdepasse === "1234") {
        session_regenerate_id(true);
        $_SESSION['user'] = $nom;
        header('Location: dashboard.php');
        exit;
    } else {
        $message = "Identifiants incorrects.";
    }
}
?>
<form method="POST">
    <label>Nom :</label>
    <input type="text" name="nom">
    <label>Mot de passe :</label>
    <input type="password" name="motdepasse">
    <button type="submit">Se connecter</button>
</form>
<?php if (!empty($message)) echo "<p style='color:red;'>$message</p>"; ?>

Étape 2 : Page protégée (dashboard.php)

<?php
session_start();
if (!isset($_SESSION['user'])) {
    header('Location: login.php');
    exit;
}
echo "<h1>Bienvenue " . $_SESSION['user'] . " !</h1>";
echo "<a href='logout.php'>Se déconnecter</a>";

Étape 3 : Déconnexion (logout.php)

<?php
session_start();
session_unset();
session_destroy();
header('Location: login.php');
exit;

5. 🧾 Résumé et points-clés

  • Contrôler l’accès avec if (!isset($_SESSION['user'])).
  • session_regenerate_id() empêche la fixation de session après connexion.
  • session_unset() et session_destroy() terminent la session en toute sécurité.
  • Toujours rediriger les utilisateurs non connectés vers la page de login.