Développement Web PDF Gratuit

Cours PHP : Les cookies en PDF (Intermédiaire)

PHP : Les cookies — Ce qu'il faut savoir. Un cookie est une petite donnée stockée côté client via l'en-tête HTTP Set-Cookie et renvoyée au serveur lors des requêtes suivantes. Les cookies mémorisent des états applicatifs (identifiants, préférences, contenu de panier) et restent utiles pour le suivi et la personnalisation côté serveur. Document PDF gratuit rédigé par Thierry VAIRA (BTS IRIS, 2003) : mécanique des en-têtes, usage de setcookie(), exemples exploitables en local ou en serveur, attributs essentiels (Expires/Max-Age, Path, Domain, Secure, HttpOnly, SameSite) et bonnes pratiques conformes à la RFC 6265 et aux comportements navigateurs.

Plan détaillé du cours PDF

  • Introduction
  • Utilisation PHP
  • Limitations
  • Fonction setcookie()
  • Exemples pratiques
  • Exercices et TP

Maîtriser le couple Cookies et Sessions en PHP

L'utilisation conjointe des cookies et des sessions est centrale pour la gestion d'état côté serveur. En PHP, la fonction session_start() initialise ou restaure une session qui repose généralement sur un cookie contenant l'identifiant de session (par exemple PHPSESSID). Une mauvaise configuration de domaine, de path ou d'attributs de sécurité pour ce cookie d'identifiant peut interrompre la continuité de la session. Concevez la logique de session en documentant le type de stockage serveur (fichiers, base de données, cache) et en validant l'identifiant de session côté serveur avant de restaurer l'état applicatif, afin de limiter les risques liés à la falsification ou au détournement de session.

🎯 Ce que vous allez apprendre

  • Mécanique HTTP des cookies — comprendre la syntaxe du header Set-Cookie: NOM=VALEUR; expires=...; path=...; domain=...; secure, la portée domaine/chemin et le diagnostic des problèmes liés aux dates d'expiration.
  • Utilisation de setcookie() en PHP — maîtrise des paramètres (name, value, expire, path, domain, secure) et des contraintes d'envoi avant tout affichage HTML pour éviter les erreurs d'en-têtes.
  • Accès et structures côté serveur — lecture et manipulation via la superglobale $_COOKIE, usage de noms tableaux (ex: cookie[1]) pour stocker plusieurs valeurs et validation pour alimenter une logique applicative (panier, préférences).
  • Limites et risques pratiques — effets du refus ou de la suppression des cookies par le client, interaction avec les sessions et alternatives opérationnelles recommandées.
  • Exemples et travaux pratiques — mise en oeuvre des fichiers fournis et réalisation d'un TP panier (tests d'ajout/vidage/calcul via cookies).

Syntaxe du header Set-Cookie

Set-Cookie: sessionId=abc123; Expires=Wed, 09 Jun 2027 10:18:14 GMT; Max-Age=2592000; Path=/; Domain=example.com; Secure; HttpOnly; SameSite=Lax

💡 Pourquoi choisir ce cours ?

Approche opérationnelle privilégiant l'équilibre théorie/pratique pour permettre au développeur PHP de passer rapidement du concept à l'implémentation. Le document propose des exemples testables, des explications claires sur les attributs de cookie et des recommandations conformes aux standards. Les extraits et TP facilitent une montée en compétence rapide et réplicable en environnement local ou serveur.

👤 À qui s'adresse ce cours ?

  • Public cible : étudiants en développement web, développeurs backend PHP débutant-intermédiaire et intégrateurs souhaitant comprendre la persistance côté navigateur et la gestion simple d'un panier via cookies.
  • Prérequis : connaissance de la syntaxe PHP de base (echo, variables), notions d'en‑têtes HTTP (méthodes, statuts, headers) et capacité à exécuter des scripts PHP sur un serveur local ou distant (Apache/Nginx, PHP 7.4+ / 8.x).

Cookies et Sessions en PHP : Quelles différences ?

Comparatif rapide entre cookies et sessions
Caractéristique Cookies Sessions
Lieu de stockage Client (navigateur) Serveur (fichiers, base de données, cache)
Capacité Limitée par navigateur (quelques kilo-octets) Gérée par le serveur, adaptée aux données volumineuses
Sécurité Dépend des attributs (HttpOnly, Secure, SameSite) ; vulnérable si mal configuré Plus sûre pour les données sensibles si l'accès serveur est protégé
Durée de vie Persistante selon Expires/Max-Age Temporaire, liée à la durée de session serveur ou au cookie d'identifiant

Lien entre Cookies et Sessions

La plupart des implémentations PHP utilisent un cookie pour transmettre l'identifiant de session au serveur : le navigateur renvoie cet identifiant, PHP retrouve la session correspondante (stockage serveur) et restaure l'état. Ce lien explique pourquoi une mauvaise configuration des attributs de cookie (domain, path, Secure) peut rompre la continuité des sessions PHP et provoquer des comportements inattendus.

Sécurisation avancée : HttpOnly, Secure et SameSite

L'attribut HttpOnly empêche l'accès aux cookies depuis JavaScript, réduisant nettement l'impact des attaques XSS sur les données sensibles. Secure limite l'envoi de cookies au canal HTTPS et prévient l'interception sur les connexions non chiffrées. SameSite contrôle l'envoi intersites et aide à atténuer les risques CSRF lorsque la gestion des sessions repose sur un identifiant transmis par cookie. Complétez ces mesures par une rotation des identifiants de session, une validation côté serveur et une politique de durée de vie adaptée pour limiter l'exposition en cas de compromission. Intégrez ces principes dans les scripts PHP gratuits fournis pour les TP afin d'enseigner la sécurisation pratique des sessions et des cookies.

Conformité RGPD et recommandations CNIL

Le consentement préalable est requis pour les cookies non essentiels (tracking, marketing) : informer clairement l'utilisateur, exposer la finalité, la durée de conservation et fournir un moyen de refus granulaire. La CNIL recommande de documenter ces choix et de conserver des preuves de consentement lorsque nécessaire. Pour les cookies strictement nécessaires au fonctionnement du site (par exemple cookie de session indispensable à la navigation), un consentement explicite n'est généralement pas requis, mais la finalité doit rester accessible et la durée limitée. Préparez un bandeau de gestion des cookies et un registre minimal des traitements pour faciliter la conformité.

Exemples de scripts PHP inclus

Les fichiers fournis permettent de reproduire les scénarios abordés et d'exécuter les TP localement ou sur serveur. Chaque script contient des commentaires et des variantes sécurisées pour l'apprentissage pratique.

  • cookie.php — démonstration basique d'envoi et lecture de cookie.
  • suite.php — exemple de suivi d'une interaction via cookie.
  • cookies1.php, cookies2.php — variantes de gestion de tableaux de cookies et validation.
  • marche.php, remplir.php, total.php — TP panier : ajout, vidage et calcul du total en utilisant des cookies.

Sécuriser vos cookies en PHP (Bonnes pratiques)

Définir systématiquement HttpOnly, Secure et SameSite pour les cookies sensibles. Utiliser le tableau d'options de setcookie() en PHP 7.3+ : setcookie('name', $value, ['expires'=>time()+3600,'secure'=>true,'httponly'=>true,'samesite'=>'Lax']). Ajouter Max-Age si une granularité en secondes est requise. Informer l'utilisateur et recueillir son consentement via un bandeau quand le traitement excède les fonctions strictement nécessaires, documenter la finalité et proposer un mécanisme de refus pour respecter le RGPD et les recommandations CNIL.

❓ Foire Aux Questions (FAQ)

Pourquoi setcookie() doit‑elle être appelée avant tout affichage ?

L'envoi d'un cookie modifie les en‑têtes HTTP : PHP ne peut pas émettre d'en‑têtes une fois le corps de la réponse commencé. Appeler setcookie() après l'émission de contenu provoque l'erreur classique d'en-têtes déjà envoyés. Placer toute logique d'envoi de cookies avant le rendu HTML évite ce conflit.

Comment stocker plusieurs valeurs pour un même cookie ?

Utiliser des noms en tableau permet d'expédier plusieurs paires : setcookie('cookie[1]', 'val1'), setcookie('cookie[2]', 'val2'). Le navigateur renverra ces paires et PHP reconstituera $_COOKIE['cookie'] en tableau. Validez et assainissez ces données avant usage pour éviter l'injection et la corruption d'état applicatif.

Quelles alternatives aux cookies pour stocker des données côté client ?

LocalStorage

Stockage clé/valeur persistant côté navigateur, accessible via JavaScript et non envoyé automatiquement au serveur. Utile pour données non sensibles et synchronisation côté client mais nécessite une stratégie pour synchroniser au serveur si nécessaire.

SessionStorage

Persistance limitée à l'onglet/fenêtre, adaptée pour données temporaires d'une session utilisateur, non partagée entre onglets et non envoyée au serveur automatiquement.

IndexedDB

Base de données côté client pour données structurées et volumineuses, accessible via JavaScript. Convient aux applications web riches nécessitant un stockage local avancé.

Stockage côté serveur

Sessions PHP, bases de données ou caches : recommandé pour les données sensibles ou critiques. Déléguer la persistance au serveur réduit l'exposition côté client et facilite la gestion des accès et des sauvegardes.