Cookies PHP
Les cookies PHP sont de petits fichiers texte côté client qui stockent des données sur le comportement et les préférences de l'utilisateur.
Introduction aux cookies PHP
Les cookies PHP sont de petits fichiers texte stockés côté client qui contiennent des données sur le comportement et les préférences de l'utilisateur. Ils sont largement utilisés pour stocker des informations telles que les préférences utilisateur, le contenu du panier d'achats ou les identifiants de session.
Dans cet article, nous allons explorer les bases des cookies PHP et la manière dont ils peuvent être mis en œuvre sur un site web.
Que sont les cookies PHP ?
Un cookie est un petit fragment de données stocké par un site web sur l'appareil de l'utilisateur. Contrairement aux sessions côté serveur, les cookies résident entièrement chez le client, ce qui les rend idéaux pour des données légères et persistantes telles que les préférences ou les jetons de suivi. PHP crée des cookies à l'aide de la fonction setcookie() et y accède via le tableau superglobal $_COOKIE. La fonction setcookie() accepte plusieurs arguments, notamment le nom du cookie, sa valeur, son délai d'expiration, son chemin, son domaine et ses indicateurs de sécurité.
Comment cela fonctionne en pratique :
- Le serveur envoie un cookie. Lorsque vous appelez
setcookie(), PHP ajoute un en-tête de réponse HTTPSet-Cookie. Le navigateur stocke le cookie. - Le navigateur le renvoie. À chaque requête ultérieure vers le même domaine, le navigateur joint automatiquement le cookie dans l'en-tête de requête
Cookie. - PHP le lit. PHP analyse les cookies entrants dans le tableau
$_COOKIE, ce qui vous permet de les lire au prochain chargement de page.
Cookies vs. Sessions
| Cookies | Sessions | |
|---|---|---|
| Où les données résident | Client (navigateur) | Serveur |
| Survit au redémarrage du navigateur | Oui (si expire est dans le futur) | Uniquement avec un cookie de session persistant |
| Limite de taille | ~4 Ko par cookie | Limitée par le stockage serveur |
| Idéal pour | Préférences, « se souvenir de moi », indicateurs non sensibles | État de connexion, données sensibles |
Utilisez les cookies pour les données petites et non sensibles qui doivent persister côté client. Utilisez les sessions lorsque les données sont sensibles ou volumineuses.
Créer des cookies PHP
Pour créer un cookie PHP, utilisez la fonction setcookie(). La syntaxe de base de la fonction setcookie() est la suivante :
Syntaxe de la fonction PHP setcookie
setcookie(name, value, expire, path, domain, secure, httponly);Où :
nameest le nom du cookievalueest la valeur à stocker dans le cookieexpireest le moment après lequel le cookie expirerapathest le chemin sur le serveur où le cookie sera disponibledomainest le nom de domaine du site websecureindique si le cookie doit être envoyé uniquement via une connexion sécurisée (HTTPS)httponlyindique si le cookie doit être masqué pour JavaScript (document.cookie), ce qui aide à se protéger contre les attaques XSS
Voici un exemple de création d'un cookie PHP :
Exemple PHP simple pour ajouter un cookie
setcookie("user", "John Doe", time() + 3600, "/");Ce code crée un cookie nommé user avec la valeur John Doe qui expire dans une heure (time() renvoie l'horodatage Unix actuel en secondes, donc ajouter 3600 fixe l'expiration une heure plus tard). Le chemin "/" rend le cookie disponible sur l'ensemble du site web.
setcookie() envoie un en-tête HTTP, il doit donc être appelé avant toute sortie — aucun HTML, espace blanc ou echo avant lui. Si une sortie a déjà commencé, vous obtiendrez un avertissement « headers already sent » et le cookie ne sera pas défini. Voir headers_sent() pour savoir comment détecter cela.
La syntaxe moderne avec tableau (PHP 7.3+)
Depuis PHP 7.3, vous pouvez passer un tableau d'options au lieu d'arguments positionnels. C'est la forme recommandée car elle permet de définir samesite, qui contrôle si le cookie est envoyé lors de requêtes cross-site (une défense clé contre le CSRF) :
setcookie("user", "John Doe", [
"expires" => time() + 3600,
"path" => "/",
"secure" => true, // only over HTTPS
"httponly" => true, // not readable by JavaScript
"samesite" => "Lax", // "Strict", "Lax", or "None"
]);Récupérer des cookies PHP
Une fois un cookie créé, sa valeur peut être récupérée via le tableau superglobal $_COOKIE. La syntaxe de base pour accéder à la valeur d'un cookie est la suivante :
PHP — comment obtenir la valeur d'un cookie
$_COOKIE['name'];Où name est le nom du cookie.
Voici un exemple de récupération d'une valeur de cookie :
PHP — comment accéder à la valeur d'un cookie
if (isset($_COOKIE["user"])) {
echo "Welcome back, " . $_COOKIE["user"];
} else {
echo "Welcome, guest!";
}Vérifiez toujours isset() avant de lire un cookie. Un cookie défini lors de la requête courante n'est pas disponible dans $_COOKIE avant le prochain chargement de page, car le navigateur ne le renvoie que lors de la requête suivante. Lire un cookie fraîchement défini dans le même script ne retourne rien.
Les valeurs des cookies arrivent comme des entrées utilisateur non fiables — n'importe qui peut les modifier dans son navigateur. Validez et assainissez-les avant utilisation, par exemple avec filter_var(). Ne faites jamais confiance à une valeur de cookie seule pour des décisions d'autorisation.
Mettre à jour des cookies PHP
Pour mettre à jour un cookie PHP, créez simplement un nouveau cookie avec le même nom et une nouvelle valeur. Le délai d'expiration doit également être mis à jour pour s'assurer que le cookie continue de persister.
Voici un exemple de mise à jour d'un cookie PHP :
Exemple de mise à jour d'un cookie
setcookie("user", "Jane Doe", time()+3600, "/", "", 0, 0);Ce code met à jour le cookie user avec la nouvelle valeur Jane Doe et prolonge son délai d'expiration d'une heure supplémentaire.
Supprimer des cookies PHP
Pour supprimer un cookie PHP, créez simplement un nouveau cookie avec le même nom et un délai d'expiration dans le passé. Cela entraînera la suppression automatique du cookie depuis l'appareil de l'utilisateur.
Voici un exemple de suppression d'un cookie PHP :
Exemple de suppression d'un cookie
setcookie("user", "", time()-3600, "/", "", 0, 0);Ce code crée un nouveau cookie user avec un délai d'expiration d'une heure dans le passé. Cela entraînera la suppression automatique du cookie depuis l'appareil de l'utilisateur.
Pour supprimer un cookie, vous devez passer le même path (et domain) que lors de sa création. Un cookie défini avec le chemin /account est différent de celui défini avec le chemin /, et effacer le mauvais chemin laisse l'original en place.
Un exemple complet : retenir une préférence de thème
Pour récapituler, voici un petit script qui permet à un visiteur de choisir un thème de couleur et de le mémoriser entre les visites grâce à un cookie :
<?php
// 1. Save the choice when the form is submitted
if (isset($_POST["theme"])) {
setcookie("theme", $_POST["theme"], time() + 60 * 60 * 24 * 30, "/"); // 30 days
// Reload so the new cookie is available to $_COOKIE
header("Location: " . $_SERVER["PHP_SELF"]);
exit;
}
// 2. Read the saved choice (default to "light")
$theme = isset($_COOKIE["theme"]) ? $_COOKIE["theme"] : "light";
?>
<p>Current theme: <?= htmlspecialchars($theme) ?></p>
<form method="post">
<button name="theme" value="light">Light</button>
<button name="theme" value="dark">Dark</button>
</form>Notez comment le script effectue une redirection après l'enregistrement afin que le cookie fraîchement défini soit lu lors de la requête suivante, et comment htmlspecialchars() échappe la valeur avant de l'afficher. Voir la gestion des formulaires PHP pour en savoir plus sur le traitement sécurisé des données $_POST.
Avantages des cookies PHP
Les cookies PHP présentent plusieurs avantages, notamment :
- Amélioration de l'expérience utilisateur : les cookies permettent aux sites web de stocker des informations spécifiques à l'utilisateur, telles que les préférences et les identifiants de connexion, qui peuvent être utilisées pour offrir une expérience utilisateur plus personnalisée.
- Données persistantes : les cookies permettent aux sites web de stocker des données sur l'appareil de l'utilisateur, qui peuvent persister même après la fermeture du navigateur ou l'arrêt de l'appareil. Cela permet aux sites web de se souvenir des préférences et des identifiants de connexion d'un utilisateur lors de plusieurs visites.
- Facilité d'implémentation : les cookies PHP sont faciles à mettre en œuvre et peuvent être utilisés pour stocker une grande variété de données, ce qui en fait un outil polyvalent pour les développeurs web.
Bonnes pratiques pour l'utilisation des cookies PHP
Pour garantir la meilleure expérience utilisateur possible et une sécurité optimale, il est important de suivre les bonnes pratiques lors de l'utilisation des cookies PHP. Parmi ces bonnes pratiques :
- Utiliser des connexions sécurisées : dans la mesure du possible, utilisez des connexions sécurisées (HTTPS) lors de la création et de l'accès aux cookies. Cela aidera à protéger les données stockées dans les cookies contre l'interception par des tiers.
- Stocker les données sensibles de manière sécurisée : ne stockez pas de données sensibles, telles que les identifiants de connexion ou les mots de passe, dans des cookies. Étant donné que les cookies sont stockés côté client, ils sont vulnérables au vol ou à la falsification. Utilisez plutôt des sessions côté serveur (
$_SESSION) pour les données d'authentification sensibles. - Utiliser des noms de cookies uniques : utilisez des noms uniques et descriptifs pour vos cookies afin d'éviter les conflits avec d'autres cookies utilisés par votre site web ou d'autres sites web.
- Limiter la quantité de données stockées : limitez la quantité de données stockées dans les cookies au strict nécessaire. Des quantités importantes de données peuvent ralentir les performances du site web et augmenter le risque de violations de données.
Conclusion
Les cookies PHP sont un outil puissant pour les développeurs web, leur permettant de stocker et de récupérer des données sur l'appareil de l'utilisateur. En suivant les bonnes pratiques et en prenant en compte la sécurité, les cookies PHP peuvent être utilisés pour améliorer l'expérience utilisateur et accroître les fonctionnalités du site web.