Chapitre 13 : Sessions et Cookies

Apprenez à utiliser les sessions et cookies en PHP pour gérer les connexions utilisateurs et stocker des données temporaires.

1. Introduction

Lorsque vous créez une application web, il est souvent nécessaire de mémoriser certaines informations entre les différentes pages : l'identité d'un utilisateur connecté, ses préférences, ou le contenu de son panier. Pour cela, PHP propose deux mécanismes : les cookies et les sessions.

2. Les cookies

Les cookies sont de petits fichiers enregistrés sur le navigateur de l'utilisateur. Ils permettent de stocker des informations entre deux visites du site web.

Créer un cookie

<?php
setcookie("pseudo", "Ahmed", time() + 3600); // expire dans 1 heure
?>

Lire un cookie

<?php
echo $_COOKIE["pseudo"];
?>

Supprimer un cookie

<?php
setcookie("pseudo", "", time() - 3600);
?>
Attention : Un cookie peut être modifié par l'utilisateur. Ne jamais stocker de données sensibles côté client.

3. Les sessions

Les sessions permettent de stocker des données sur le serveur, associées à un utilisateur via un identifiant unique. Elles sont plus sécurisées que les cookies.

Démarrer une session

<?php
session_start();
?>

Créer une variable de session

<?php
session_start();
$_SESSION["pseudo"] = "Ahmed";
?>

Lire une variable de session

<?php
session_start();
echo $_SESSION["pseudo"];
?>

Supprimer une variable ou toute la session

// Supprimer une variable
unset($_SESSION["pseudo"]);

// Supprimer toutes les variables et détruire la session
session_unset();
session_destroy();
Conseil : Les sessions sont idéales pour les systèmes de connexion, les paniers, ou tout ce qui nécessite un suivi utilisateur.

4. Comparaison : Cookies vs Sessions

Caractéristique Cookies Sessions
Stockage Dans le navigateur Sur le serveur
Sécurité Moins sécurisé Plus sécurisé
Taille max Environ 4 Ko Limite serveur
Expiration Spécifiée manuellement Fin de session ou manuelle
Utilisation Préférences utilisateur Authentification, paniers

5. Exemple pratique

Voici un exemple complet de connexion simulée avec une session :

<?php
// login.php
session_start();

if ($_POST["pseudo"] === "admin" && $_POST["password"] === "1234") {
  $_SESSION["connected"] = true;
  echo "Bienvenue admin !";
} else {
  echo "Identifiants invalides.";
}
?>
<!-- formulaire.html -->
<form action="login.php" method="post">
  <input type="text" name="pseudo" placeholder="Votre pseudo">
  <input type="password" name="password" placeholder="Mot de passe">
  <button type="submit">Se connecter</button>
</form>

6. Gestion avancée des sessions

PHP offre des options avancées pour personnaliser le comportement des sessions :

Changer le nom de session

<?php
session_name("MON_SESS_ID");
session_start();
?>

Définir le chemin de sauvegarde

session_save_path("/tmp/mes_sessions");

Configurer la durée de vie d'une session

ini_set('session.gc_maxlifetime', 1800); // 30 minutes

Régénérer l'identifiant de session

session_regenerate_id(true);

7. Sécurité des sessions et cookies

  • Utiliser toujours session_start() au début de la page.
  • Activer les options secure et httponly pour les cookies :
    setcookie("token", "valeur", [
      "expires" => time() + 3600,
      "path" => "/",
      "secure" => true,
      "httponly" => true,
      "samesite" => "Strict"
    ]);
  • Ne jamais stocker de données sensibles dans un cookie ou une session sans chiffrement.

8. Astuce : mémoriser un utilisateur

Pour une option « Se souvenir de moi », combinez session + cookie avec un token sécurisé côté serveur.

Stocker le token côté BDD, et comparer à celui du cookie lors de la reconnexion automatique.

9. Exercices proposés

  1. Créer une page de connexion avec session PHP.
  2. Afficher un message personnalisé à l'utilisateur connecté.
  3. Créer une page de déconnexion.
  4. Créer un cookie qui enregistre la langue choisie par l'utilisateur.

10. À retenir

  • Cookies : stockage client – Sessions : stockage serveur
  • Sessions = plus sécurisé, bon pour authentification
  • session_start() est toujours requis
  • Éviter les données sensibles dans les cookies
  • Sécuriser vos applications avec httponly, secure et session_regenerate_id()

11. Ce que vous apprendrez ensuite

Dans le chapitre 14, nous allons explorer la manipulation de fichiers avec PHP. Vous apprendrez à lire, écrire et gérer des fichiers sur le serveur.