Sommaire

Qu'est-ce qu'un cookie

En plus de délicieux gateaux les cookies sont aussi, selon Wikipedia,
de petits fichiers textes stockés par le navigateur Web sur le disque dur du visiteur d'un site Web et qui servent (entre autres) à enregistrer des informations sur le visiteur ou encore sur son parcours dans le site. Le webmestre peut ainsi reconnaître les habitudes d'un visiteur et personnaliser la présentation de son site pour chaque visiteur ; les cookies permettent alors de garder en mémoire combien d'articles il faut afficher en page d'accueil ou encore de retenir les identifiants de connexion à une éventuelle partie privée : lorsque le visiteur revient sur le site, il ne lui est plus nécessaire de taper son nom et son mot de passe pour se faire reconnaître, puisqu'ils sont automatiquement envoyés par le cookie.

Un cookie a une durée de vie limitée, fixée par le concepteur du site. Ils peuvent aussi expirer à la fin de la session sur le site, ce qui correspond à la fermeture du navigateur. Les cookies sont largement utilisés pour simplifier la vie des visiteurs et lui présenter des informations plus pertinentes. Mais une technique particulière permet aussi de suivre un visiteur sur plusieurs sites et ainsi de collecter et recouper des informations très étendues sur ses habitudes. Cette technique a donné à l'usage des cookies une réputation de technique de surveillance violant la sphère privée des visiteurs.
Nous voilà un plus cultivé, bien maintenant comment utiliser ces cookies (pour faciliter la vie de l'utilisateur pas pour le fliquer hein !).
D'une manière générale deux voire trois manipulations se font sur les cookies, la création, la lecture et la destruction.
Deux méthodes pour faire tout cela, en PHP ou en JavaScript. Puisque l'on peut avoir besoin de connaitre les deux, commençons par le PHP :

Manipuler des cookies en PHP

Création
La création de cookies en PHP se fait via la fonction setcookie qui se definit comme suit : bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure [, bool httponly]]]]]] )
Comme vous pouvez le voir seul le nom est obligatoire. Il est aussi à noter que les cookies sont des en-têtes et doivent donc être envoyer avant toute sortie balise <html> ou <head>
Voyons tout de suite un exemple un poil plus concret.
Exemple
<?php setcookie("Nom","Dupond",time()+3600); ?>
Ceci va donc nous créer un cookie nommé "Nom" dont la valeur est "Dupond" et qui expire dans une heure. Concernant l'argument expire, il est à noter que celui-ci est un timestamp Unix et qu'il vous faudra donc utiliser la fonction time() ou mktime(). Si vous occultez l'argument expire ou si vous le fixez à 0, le cookie expirera à la fin de la session (soit la fermeture du navigateur).
Je ne m'attarderais pas plus sur les arguments de setcookie mais vous pouvez retrouver toutes les explications nécessaires sur l'excellent manuel php ICI.
Lecture
La aussi la manipulation est simplissime, on récupère nos cookies grâce aux variables prédéfinies $_COOKIES ou $HTTP_COOKIE_VARS
Ainsi et pour reprendre l'exemple :
Exemple
<?php
echo $_COOKIE['Nom']; // affichera Dupond
echo $HTTP_COOKIE_VARS['Nom']; //affichera aussi Dupond mais n'est disponible qu'a partir de PHP 4.1.0
?>
La aussi c'est tout simple !
A noter que si vous désirez lister tous vos cookies vous pouvez le faire via la méthode suivante :
<?php
print_r($_COOKIE); //affichera tous vos cookies
?>
Voilà pour la lecture, passons donc à la destruction !
Destruction (MAJ 04/06)
La méthode vue précédemment (à savoir l'utilisation de setcookie avec comme seul argument le nom du cookie) ayant à priori des réactions difficilement prévisibles, puisque si un cookie dont la valeur est null, est censé être éffacé du client, cela ne semble pas toujours être le cas, nous allons voir deux méthodes plus "sûres" afin de faire disparaitre ces délicieux biscuits.
La première, toujours en utilisant la fonction setcookie, consiste à fixer la date d'expiration dans le passé (-1 heure par exemple).
Exemple
<?php
setcookie("Nom", "", time()-3600); //detruira notre ami Dupond :'(
?>
la seconde méthode est, comme le suggère notre ami Thanh, d'utiliser la fonction unset toujours utile pour détruire une variable !
Exemple
<?php
unset($_COOKIE["Nom"]); //detruira notre ami Dupond :'(
?>

Voilà, c'est à peu près tout ce qu'il y a à savoir sur les cookies et leur manipulation via PHP. Rien de bien compliqué donc et c'est aussi le cas avec JavaScript, que nous allons voir tout de suite.
Mais avant je sens pointer la question :
Mais pourquoi je me ferais ***** à apprendre à les manipuler en JavaScript alors que je sais le faire maintenant en PHP ?
Très bonne question à laquelle, en temps que pseudo informaticien et vrai feignant, il est difficile de trouver une réponse engageante. Cependant on pourra en avncer au moins deux, la première : "On en sait jamais assez"...
Ok, passons à la deuxième alors, on a pu voir que la manipulation via PHP nous obligeait à utiliser la fonction setcookie avant toute sortie ce qui est somme toute assez limitatif hors JavaScript nous permet de nous affranchir de cette limitation en nous permettant la manipulation de cookie à n'importe quel moment/endroit de notre page.
Troisième raison qui n'en est pas une, c'est aussi très simple.

Manipuler des cookies avec JavaScript

Création
Evidemment que ce soit en JavaScript, PHP, VBScript ou Mambo, un cookie reste un cookie avec les mêmes paramètres.
En Javascript on crée un cookie grâce à document.cookie, le mieux est de créer une fonction afin d'éviter les répétitions de code. On pourra donc utiliser la fonction vu précédemment dans le tuto pour créer un changeur de style en JavaScript :
<script type="text/javascript" language="JavaScript" >
function creerCookie(name,value,days) {
if (days) {
var date = new Date(); //on instancie un objet Date
date.setTime(date.getTime()+(days*24*60*60*1000)); //on recupère la date
var expires = "; expires="+date.toGMTString(); //on fixe la date d'expiration
}
else expires = ""; //si la date n'est pas précisée on fixe la valeur par défaut
document.cookie = name + "=" + value + expires + "; path=/"; //on crée le cookie
}
</script>
On place ce bout de code entre les balises <head> de notre page. Ainsi pour créer un cookie, il suffit d'appeler cette fonction à partir du corps de notre page et de cette manière :
Exemple
<script type="text/javascript" language="JavaScript" >
creerCookie("Nom","Dupond",30);
</script>
Cela va donc nous créer un cookie "Nom" qui aura pour valeur "Dupond" et qui expirera à 30 jours.
Lecture
Ici aussi, on utilise une fontion qui se présente comme suit :
<script type="text/javascript" language="JavaScript" >
function lireCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
</script>
Cette fonction étant un peu compliqué, on la détaillera pas ici (a moins que vraiment vous insistiez ;p). Toujours est-il que son utilisation, elle, est très simple puisqu'il suffit d'inserer dans notre corps de page un petit appel de cette manière :
<script type="text/javascript" language="JavaScript" >
var nom = lireCookie("Nom"); //nom prendra pour valeur "Dupond"
</script>
Destruction
Pour finir, la destruction, pour détruire notre cookie, on va en fait recréer notre cookie, mais avec une date d'expiration obsolète :
<script type="text/javascript" language="JavaScript" >
function EffaceCookie(nom)
{
date = -1;
creerCookie(nom,null,date);
}
</script>
L'expiration a, ici, été fixée à -1 jour, mais peu importe du moment que c'est antérieur à maintenant (moins 1 heure aurait marché). Donc voila ne reste plus qu'a appeler la fonction depuis notre page, je vous fais grâce d'ailleurs de celui-ci et m'en vais aller déguster quelques biscuits aux pépites de chocolat... ;)