Travailler avec des cookies fonctionne à peu près de la même façon qu'avec des sessions, à quelques petites différences près que nous allons voir. Voici ce que nous allons faire pour découvrir les cookies :
- On va voir ce que c'est un cookie exactement... parce que si ça se trouve il y en a qui croient en ce moment même que je vais parler de recettes de cuisine !

- Ensuite, nous verrons comment écrire un cookie. C'est facile à faire, si on respecte quelques règles.
- Enfin, nous verrons comment récupérer le contenu d'un cookie. Ce sera le plus simple.

Qu'est-ce qu'un cookie ?
Un cookie, c'est un petit fichier que l'on enregistre sur l'ordinateur du visiteur.
Ce fichier contient du texte et permet de "retenir" des informations sur le visiteur. Par exemple, vous inscrivez dans un cookie le pseudo du visiteur, comme ça la prochaine fois qu'il viendra sur votre site vous pourrez lire son pseudo en allant regarder ce que son cookie contient.
Parfois les cookies ont une mauvaise image. On fait souvent l'erreur de penser que les cookies sont "dangereux". Non, ce ne sont pas des virus, juste des petits fichiers textes qui permettent de retenir des informations. Au pire, un site marchand peut retenir que vous aimez les appareils photos numériques et vous afficher uniquement des pubs pour des appareils photos, mais c'est tout, ces petites bêtes sont inoffensives pour votre ordinateur.
Chaque cookie stocke généralement une information à la fois. Si vous voulez stocker le pseudonyme du visiteur et sa date de naissance, il est donc recommandé de créer 2 cookies.
Où sont stockés les cookies sur mon disque dur ?
Cela dépend de votre navigateur web. Généralement on ne touche pas directement à ces fichiers, mais on peut afficher à l'intérieur du navigateur la liste des cookies qui sont stockés. On peut choisir de les supprimer à tout moment.
Si vous avez Mozilla Firefox, vous pouvez aller dans le menu
Outils / Options / Vie privée et cliquer sur
Supprimer des cookies spécifiques. Vous obtenez la liste et la valeur de tous les cookies stockés :
Les cookies sont classés par site web. Chaque site web peut écrire comme vous le voyez plusieurs cookies. Chacun d'eux a un nom et une valeur (que vous pouvez voir à la ligne
Contenu sur ma capture). Vous noterez que comme tout cookie qui se respecte, ils ont chacun une date d'expiration. Après cette date,
ils ne sont plus bons à manger ils sont automatiquement supprimés par le navigateur.
Les cookies sont donc des informations temporaires que l'on stocke sur l'ordinateur des visiteurs. La taille est limitée à quelques Ko, vous ne pouvez pas stocker beaucoup d'informations à la fois, mais c'est en général suffisant.
Ecrire un cookie
Comme une variable, un cookie a un nom et une valeur. Par exemple, le cookie
pseudo aurait chez moi la valeur
M@teo21.
Pour écrire un cookie, on utilise la fonction PHP
setcookie (qui signifie "Placer un cookie" en anglais).
On lui donne en général 3 paramètres, dans l'ordre suivant :
- Le nom du cookie (ex. : pseudo)
- La valeur du cookie (ex. : M@teo21)
- La date d'expiration du cookie, sous forme de timestamp (ex : 1090521508).
Le paramètre correspondant à la date d'expiration du cookie mérite quelques explications. Il s'agit d'un timestamp, c'est-à-dire du nombre de secondes écoulées depuis le 1er janvier 1970. Le timestamp est une valeur qui augmente de 1 toutes les secondes. Pour obtenir le timestamp correspondant à maintenant, on fait appel à la fonction
time(). Pour définir une date d'expiration du cookie, il faut ajouter au "moment actuel" le nombre de secondes dans lequel il doit expirer.
Si vous voulez supprimer le cookie dans un an, il vous faudra donc écrire :
time() + 365*24*3600. Cela veut dire : timestamp actuel + nombre de secondes dans une année. Cela aura pour effet de supprimer votre cookie dans exactement un an.
Voici donc comment on peut créer un cookie :
Code : PHP | <?php setcookie('pseudo', 'M@teo21', time() + 365*24*3600); ?>
|
Sécuriser son cookie avec le mode httpOnly
Je recommande toutefois d'activer l'option
httpOnly sur le cookie. Sans rentrer dans les détails, cela rendra votre cookie inaccessible en javascript sur tous les navigateurs qui supportent cette option (c'est le cas de tous les navigateurs récents). Cette option permet de réduire drastiquement les risques de faille XSS sur votre site, au cas où vous ayez oublié d'utiliser
htmlspecialchars à un moment.
Je vous
recommande donc de créer votre cookie plutôt comme ceci :
Code : PHP | <?php setcookie('pseudo', 'M@teo21', time() + 365*24*3600, null, null, false, true); ?>
|
Le dernier paramètre
true permet d'activer le mode httpOnly sur le cookie et donc de le rendre en quelque sorte plus sécurisé. Ca ne coûte rien et vous diminuez le risque qu'un de vos visiteurs puisse se faire voler le contenu d'un cookie un jour à cause d'une faille XSS.
Les paramètres au milieu sont des paramètres que nous n'utilisons pas, je leur ai donc envoyé null.
Créer le cookie avant d'écrire du HTML
Il y a un petit problème avec
setcookie... Comme pour
session_start, cette fonction ne marche
que si vous l'appelez avant tout code HTML (donc avant la balise
<!DOCTYPE>).
Ne placez donc JAMAIS le moindre code HTML avant d'utiliser setcookie. La plupart des gens qui ont des problèmes avec setcookie ont fait cette erreur, donc souvenez-vous en !
Voyons maintenant comment je ferais pour inscrire 2 cookies : un qui retient mon pseudo pendant un an, et un autre qui retient le nom de mon pays :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | <?php
setcookie('pseudo', 'M@teo21', time() + 365*24*3600, null, null, false, true); // On écrit un cookie
setcookie('pays', 'France', time() + 365*24*3600, null, null, false, true); // On écrit un autre cookie...
// Et SEULEMENT MAINTENANT, on peut commencer à écrire du code html
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>Ma super page PHP</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
... etc etc...
|
Et voilà, les cookies sont écrits !

Comme vous le voyez, pour écrire 2 cookies il faut appeler 2 fois
setcookie.
Afficher un cookie
C'est la partie la plus simple. Avant de commencer à travailler sur une page, PHP lit les cookies du client pour récupérer toutes les informations qu'ils contiennent. Ces informations sont placées dans la superglobale
$_COOKIE, sous forme d'array comme d'habitude.
De ce fait, si je veux ressortir le pseudo du visiteur que j'avais inscrit dans un cookie, il suffit d'écrire :
$_COOKIE['pseudo']
Ce qui nous donne un code PHP tout bête pour réafficher le pseudo du visiteur :
Code : PHP | <p>
Hé ! Je me souviens de toi !<br />
Tu t'appelles <?php echo $_COOKIE['pseudo']; ?> et tu viens de <?php echo $_COOKIE['pays']; ?> c'est bien ça ?
</p>
|
Comme vous le voyez encore une fois, le gros avantage c'est que les superglobales sont accessibles partout.
Vous avez besoin de savoir ce que contient le cookie
pseudo ? Affichez donc le contenu de la superglobale
$_COOKIE['pseudo'] !
A noter que si le cookie n'existe pas, la variable superglobale n'existe pas. Il faut donc faire un
isset pour vérifier si le cookie existe ou non.
Les cookies viennent du visiteur. Comme toute information qui vient du visiteur, elle n'est pas sûre. N'importe quel visiteur peut créer des cookies et envoyer ainsi de fausses informations à votre site. Souvenez-vous en lorsque vous lisez les cookies du visiteur : il peut les avoir modifiés, donc soyez prudents et ne faites pas une confiance aveugle au contenu de ces cookies !
Modifier un cookie existant
Vous vous demandez peut-être comment modifier un cookie déjà existant ? C'est là encore très simple : il faut refaire appel à
setcookie en gardant le même nom de cookie. Cela "écrasera" l'ancien cookie.
Par exemple, si j'habite maintenant en Chine, je ferai :
Code : PHP | <?php setcookie('pays', 'Chine', time() + 365*24*3600, null, null, false, true); ?>
|
Notez qu'alors le temps d'expiration du cookie est remis à zéro pour un an.