Tuto original de FABRICE POTEC, revu par LionZion, Molokai et Raf en août 2004
Qu'est-ce qu'un cookie ?
Un cookie est un fichier texte de taille limitée
(65ko) permettant de stocker certaines informations. Le but premier de
ce type de fichier et de pouvoir garder en mémoire les informations d'un visiteur
afin de pouvoir les réutiliser à chacune de ses visites. Par exemple on y
stocke son NOM, son PRENOM, son Nickname, etc... Bien sûr cela n'est
possible qu'à partir du moment où le visiteur a entré lui-même ses informations dans un formulaire sur le site.
N.B:
La légende qui dit que le cookie est capable de savoir quels sont
les logiciels installés sur votre PC n'est pas fondée en soi, dans
le sens où un fichier texte n'exécute aucun programme, il est
passif. Ceci dit, une fonction cachée dans un programme qui fait
plusieurs MégaOctets peut très bien checker votre disque dur puis
écrire des infos dans un cookie qui pourra ensuite être
récupéré sur le web.
Ou sont stockés les cookies ?
Cela dépend du navigateur que vous utilisez, pour
cet exemple nous travaillerons avec INTERNET EXPLORER qui représente
entre 80 et 90% du marché. Les cookies sont donc stockés (comme
tous les autres fichiers temporaires du NET) dans C:\windows\Temporary Internet Files
(voir l'image ci-dessous).
De quoi est constitué le contenu d'un cookie ?
Regardons par exemple le cookie que j'utilise pour
stocker les couleurs du design de PHP Débutant, au passage regardez
le nom dans la barre de titre (fpotec@www.phpdebutant[1].txt),
la valeur entre crochets: [1]
indique combien de cookies sont stockés dans le fichier :
- La première valeur (DESIGN)
est le nom du cookie. Notez que le nom du cookie n'est pas le nom du
fichier (Cookie: fpotec@www.phpdebutant.com/).
- La seconde valeur (gray) est la
valeur assignée au cookie.
- La troisième valeur (www.phpdebutant.com/)
indique d'où provient le cookie et par quel site il est utilisé.
- Les valeurs suivantes sont des valeurs par défaut (à moins que
vous ne les spécifiez lors de la génération du cookie comme la
date d'expiration).
N.B : Si plusieurs cookies
proviennent du même site ils sont tous stockés dans le même
fichier (ici: Cookie:
fpotec@www.phpdebutant.com/)
Comment générer un cookie avec PHP ?
C'est la fonction setcookie()
qui permet l'envoi de cookie :
Code
PHP |
<?
$expire
= 365*24*3600;
// on
définit la durée du cookie, 1 an
setcookie("nickname","xeros",time()+$expire);
// on
l'envoi
?> |
Comme vous le voyez, l'envoi d'un cookie est vraiment
simple, ici on envoie un cookie portant le nom : nickname
et ayant la valeur : xeros, nous avons
également indiqué que ce cookie avait une date de validité de 1
an (date en cours + 365*24*3600),
attention il faut toujours exprimer cette valeur en secondes !
N.B:
Si vous souhaitez envoyer plusieurs cookies il vous suffit de mettre
plusieurs setcookie() les uns à la suite des autres, je vous
rappelle qu'ils sont tous stockés dans un seul et même fichier,
comme ceci :
Code
PHP
|
<?
$expire
= 365*24*3600;
setcookie("nickname","xeros",time()+$expire);
setcookie("nom","potec",time()+$expire);
setcookie("prenom","fabrice",time()+$expire);
?> |
Comment lire les cookies quand un visiteur revient sur mon site ?
Là encore c'est un jeu d'enfant car php va regarder
si un fichier contenant des éventuels cookies existe sur la machine
du visiteur. Vous il ne vous reste plus qu'à appeler la valeur stockée dans le cookie à l'aide du tableau global $_COOKIE :
Code
PHP
|
<?
// On affiche la valeur de nickname
echo
"Bonjour $_COOKIE["nickname"]";
?>
|
Notez que si le visiteur n'a pas de cookie venant de votre site,
rien ne sera affiché et aucun message d'erreur n'apparaîtra, d'où
le côté pratique de cette utilisation.
Quelles sont les restrictions à connaître avec les cookies ?
1 . L'envoi d'un cookie doit être la
première fonction PHP que vous utilisez dans votre script, donc
tout en haut du script. Si d'autres fonctions interviennent avant
l'envoi du cookie, celui-ci ne fonctionnera pas.
2 . Le script qui envoie le cookie doit être
placé sur la racine de votre serveur et jamais dans un
sous-répertoire, je ne dis pas que cela ne fonctionnera pas chez
certains hébergeurs, mais je l'ai testé à plusieurs endroits et
seul l'envoi depuis la racine fonctionnait parfaitement.
3 . Si vous envoyez un cookie sur un poste
client celui-ci effacera automatiquement l'ancien cookie qui portait
le même nom (si il y en avait un), autrement il le créera.
4 . Voici la page de la documentation traitant de la fonction setcookie :
http://www.php.net/manual/fr/function.setcookie.php