TP : Espace Membre en PHP 8.4
Thème :
Junior
1 vues ·12/20 leçons

12 — La Déconnexion (deconnexion.php)

Pourquoi détruire la session ?

Quand un utilisateur se déconnecte, il faut supprimer toutes ses informations de la session. Sinon, n’importe qui qui accède au même navigateur pourrait utiliser le compte.


Le fichier deconnexion.php

<?php
session_start();
require_once 'flash.php';

// 1. Vider le tableau $_SESSION
$_SESSION = array();

// 2. Stocker le message flash APRÈS avoir vidé la session,
//    mais AVANT de détruire la session
flash_set('success', "Vous avez été déconnecté avec succès.");

// 3. Rediriger
header('Location: connexion.php');
exit();

Explication pas à pas

Étape 1 : Vider $_SESSION

$_SESSION = array();

On remplace le tableau $_SESSION par un tableau vide. Toutes les données (id, pseudo, mail, role) sont effacées.

Étape 2 : Message flash après vidage

flash_set('success', "Vous avez été déconnecté avec succès.");

Attention : On appelle flash_set() APRÈS avoir vidé $_SESSION. C’est pour éviter que la session ne contienne à la fois les données utilisateur ET le message flash.

flash_set() réécrit juste $_SESSION['flash'], ce qui est correct.

Pourquoi ne pas appeler session_destroy() ?

// On pourrait faire :
session_destroy();

session_destroy() détruit le fichier de session côté serveur. Mais cela supprime également le message flash qu’on vient de stocker ! En ne l’appelant pas, on garde la session (et donc le message) disponible pour la prochaine page.


Le flux complet

[Clic sur "Déconnexion"]
         ↓
[deconnexion.php se charge]
         ↓
[$_SESSION = array()]        ← Tout effacé
         ↓
[flash_set('success', ...)]  ← Message stocké dans $_SESSION['flash']
         ↓
[header("Location: connexion.php")]
         ↓
[connexion.php se charge]
         ↓
[header.php → flash_get()]   ← Lit et supprime le message
         ↓
["Vous avez été déconnecté" affiché]

Ce qu’il faut retenir

Action Code
Vider la session $_SESSION = array();
Détruire la session (optionnel) session_destroy();
Rediriger header("Location: page.php"); exit();

Protéger contre les accès non autorisés

Si un utilisateur va directement sur profil.php après s’être déconnecté :

// En haut de profil.php, editionprofil.php, admin.php...
session_start();

if (!isset($_SESSION['id'])) {
    header("Location: connexion.php");
    exit();
}

Comme $_SESSION['id'] a été effacé, la condition est vraie et l’utilisateur est redirigé.


🔒 Bonne pratique : Ne mettez jamais de données sensibles dans un formulaire caché ou dans une URL ($_GET). La session est le seul endroit sécurisé pour stocker l’identité de l’utilisateur côté serveur.

Prêt à passer à la suite ?

Vous avez terminé cette leçon sur 12 — La Déconnexion (deconnexion.php). Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.