Accueil/Informatique & Développement /Chapitre 06 /Fiche de révision

Sessions & espace membre

Recto-verso. À relire la veille. Le cours · Les exercices

Le principe

HTTP est sans mémoire. La session l'ajoute :

navigateur → un jeton
serveur → les données

Les données ne quittent jamais le serveur : c'est ce qui rend la session plus sûre qu'un cookie.

Le cycle

php
session_start();      // 1re LIGNE

$_SESSION["user"] = "Paul";
echo $_SESSION["user"];

$_SESSION = [];
session_destroy();

session_start() sur chaque page concernée.

⚡ Avant tout affichage

session_start() et header() doivent venir avant le moindre caractère — même une ligne vide avant <?php.

erreur
headers already sent

Cause : la session passe par un cookie, donc par les en-têtes HTTP.

GET / POST

GETPOST
OùURLcorps
Visibleouinon
Partageableouinon
Pourchercherenvoyer

Aucun des deux n'est chiffré → HTTPS.

Valider

php
if ($_SERVER["REQUEST_METHOD"]
    === "POST") { … }

$x = trim($_POST["x"] ?? "");
strlen($mdp) < 6
filter_var($m, FILTER_VALIDATE_EMAIL)

trim() sur le nom et l'email — jamais sur un mot de passe.

Compteur

php
$_SESSION["visites"] =
   ($_SESSION["visites"] ?? 0) + 1;

?? = « ou, si ça n'existe pas, alors… »

⚡ Le garde

php — page PRIVÉE
session_start();
if (!isset($_SESSION["user"])) {
    header("Location: login.php");
    exit();          // ← indispensable
}

Jamais sur login.php → sinon ERR_TOO_MANY_REDIRECTS.

⚡ exit()

header("Location: …") n'arrête pas le script : il ajoute seulement un en-tête.

Sans exit(), le code suivant s'exécute et peut envoyer la page privée à un visiteur non connecté.

Connexion / déconnexion

php
// login
$_SESSION["user"] = $login;
header("Location: accueil.php");
exit();

// logout
$_SESSION = [];
session_destroy();
header("Location: login.php");
exit();

Les 4 fichiers

login.phppas de garde
accueil.phpgarde
logout.phpdétruit
header/footercommuns

Déboguer

php
echo "<pre>";
print_r($_SESSION);
echo "</pre>";

Vide → session_start() oublié.
Rempli mais refusé → clé mal orthographiée.

À retirer avant de rendre.

Sécurité

  • htmlspecialchars() avant tout affichage.
  • strtolower() sur l'identifiant, pas sur le mot de passe.
  • En vrai : utilisateurs en base, password_hash() / password_verify().