📘 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()
etsession_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()
etsession_destroy()
terminent la session en toute sécurité.- Toujours rediriger les utilisateurs non connectés vers la page de login.