COURS JavaScript



Accueil | Boîte à outils : Les Cookies : Structure

Les Cookies


Généralités

Comme toute chose en JavaScript et surtout sur le Net, les cookies ont une structure très précise. Cette structure n'est pas le fruit du hasard. Elle est sévèrement contrôlée par les plus hautes instances du Net pour d'évidentes raisons de sécurité.

Pour les puristes et les confirmés qui voudront aller plus loin, je vous engage à aller voir le site http://www.netscape.com/newsref/std/cookie_spec.html

Pour les autres qui veulent apprendre pas à pas, la structure d'un cookie est la suivante :

Nom=Contenu; expires=expdate; path=Chemin; domain=NomDeDomaine; secure

J'explique :

Nom=Contenu;

Sont deux variables suivies d'un ";" (point virgule). Elles représentent l'en-tête du cookie.
Dans la variable Nom vous mettrez le nom que vous voudrez donner à votre cookie.
Vous pouvez donner n'importe quel nom à cette variable Nom (c'est vous qui décidez) mais quelque soit la manière dont vous l'appellerez, elle devra contenir le nom de votre cookie. Toto, Titi, Tata, sont des variables tout à fait convenables, mais reconnaissez que c'est moins pratique pour s'y retrouver. Je vous conseille donc d'appeler cette variable Nom, ce qui est infiniment plus clair hein ?

Notez et c'est vraiment important, que ce nom ne devra comprendre ni espace, ni caractères spéciaux, ni accents. Si vous utilisez des majuscules, il faudra vous en souvenir, car vous savez que les majuscules sont extrêmement importantes en JavaScript comme sur tout serveur tenant compte de la "casse" (majuscules et minuscules).

Dans la variable Contenu vous mettrez le contenu de votre cookie (ce que vous voulez écrire sur le disque dur du client). Là encore, vous pouvez inventer un nom de variable quelconque. Le tout, c'est qu'elle devra contenir le contenu de ce que vous désirez retrouver plus tard. Pour ma part, j'ai l'habitude de l'appeler Contenu. Mais c'est tout à fait personnel. J'en conviens. Ce qui fait que dans mes programmes, vous trouverez souvent le couple

Nom=Contenu;

C'est vous qui voyez.

ATTENTION !!!
Comme nous le verrons plus tard, plusieurs cookies sont séparés par des ";" (points virgules). EVITEZ donc d'insérer des ";" dans la chaîne de caractères que vous mettrez dans la variable Contenu. Ca riquerait de tout faire rater. Retenez seulement que vous pouvez presque tout mettre dans un cookie, sauf des ";" (point virgules).

Ensuite, vous devez avoir le mot réservé expires suivi du signe "=" (égal). Derrière ce signe, vous mettrez une date d'expiration représentant la date à laquelle le cookie sera supprimé du disque dur du client. Cette date doit être au format :
Wdy, DD-Mon-YYYY HH:MM:SS GMT
ce qui est relativement barbare. J'en conviens. Mais c'est pas moi qui ait inventé les cookies. Pour simplifier la chose, je vous propose d'utiliser les fonctions de l'objet Date qui est décrit dans la leçon sur l'objet Date

Mais il existe une manière encore plus simple (si l'on peut dire...) qui sera valable quelque soit la date à laquelle le client consultera votre page. C'est d'indiquer un délai en nombre de jours (ou d'années) avant disparition du Cookie. Pour cela, nous utiliserons une méthode de l'objet Date qui permet de fixer le temps en millisecondes. Pour commencer, créons un objet Date à la date courante :

var expdate = new Date () ; // crée un objet date . Nous en aurons besoin pour travailler dessus. Vous connaissez déjà cette instruction étudiée dans la leçon sur l'objet Date.

Commençons par positionner la valeur de cet objet Date au nombre de millisecondes qui se sont écoulées entre le premier janvier 1970 à 00 heure 00 minute 00 seconde (le temps zéro de l'informatique) et maintenant (le moment où le cookie est écrit sur le disque). Nous pouvons faire ça en jouant sur la méthode .setTime d'un objet Date qui permet de fixer le temps comme on le désire (en millisecondes depuis le premier janvier 1970 à 00 heure 00 minute 00 seconde) en écrivant :

expdate.setTime (expdate.getTime() )

.getTime() représente le nombre de millisecondes depuis le temps zéro de l'informatique jusqu'à aujourd'hui. Cette valeur varie sans cesse selon le moment où vous le demandez. Il se rajoute 1000 millisecondes toutes les secondes (logique non ? ).
Puis rajoutons une journée en donnant la valeur d'une journée en millisecondes.
Je rappelle que 1 seconde = 1000 millisecondes. Comme il y a 60 secondes dans une minute, une minute représentera
60 * 1000 millisecondes. Une heure étant constituée de 60 minutes, une heure aura donc : 60 * 60 * 1000 millisecondes. Et une journée ayant en général 24 heures, il y aura 24 * 60 * 60 * 1000 millisecondes dans une journée. Toujours aussi logique. Nous pouvons maintenant fixer notre variable expdate à une journée de plus que le moment où le client lit votre page en écrivant :

expdate.setTime (expdate.getTime() + (24 * 60 * 60 * 1000))

Notez que vous pouvez jouer sur le nombre de journées en multipliant tout ça par autant de jours que vous voulez. Par exemple, pour que le cookie reste 10 jours sur le disque du client, vous écrirez :

expdate.setTime (expdate.getTime() + ( 10 * 24 * 60 * 60 * 1000))

C'est vous qui décidez. Il n'est pas indispensable de faire séjourner des cookies indéfiniment sur le disque dur du client. Je vous rappelle que de toutes manières, comme les cookies ont des limites en nombre et en volume (voir page précédente) les premiers arrivés seront éliminés pour laisser la place aux nouveaux si la place venait à manquer. Alors...

Nous laisserons de côté pour le moment les arguments path, domain et secure qui ne sont pas d'une grande utilité. Ils sont facultatifs.

path représente le chemin de la page qui a créé le cookie.
domain représente le nom du domaine de cette même page
secure prend les valeurs "true" ou "false" selon que le cookie doit utiliser des protocoles HTTP simples (non sécurisés) ou HTTPS (sécurisés).

De toutes façons, lorsque ces arguments sont omis, les valeurs par défaut sont prises. Pour secure, la valeur est "False" par défaut. Celles et ceux qui voudraient en savoir plus (mais ça ne représente pas grand intérêt) vous pouvez consulter le site donné en haut de cette page.



Ecrire un cookie sur le disque du client

Une fois que vous avez donné aux différents paramètres étudiés ci-dessus les valeurs que vous désirez qu'ils aient, il ne reste plus qu'à écrire le cookie sur le disque dur du client. Alors là, rien de plus facile. Prenons un exemple concret pour bien comprendre.

Donnons d'abord un nom à notre cookie. Appelons le "MonCookie" (vous voyez, j'ai toujours autant d'imagination !). Nous pourrons alors écrire :

var Nom = "MonCookie" ; // nom du cookie

Puis donnons lui un contenu. Par exemple "Hé... Vous avez un cookie sur votre disque !". Nous écrirons :

var Contenu = "Hé... Vous avez un cookie sur votre disque !" ; // contenu du cookie

Fixons qu'il sera éliminé dans 10 jours. Nous écrirons :

var expdate = new Date () ; // crée un objet date indispensable

puis rajoutons lui 10 jours d'existence en écrivant comme vu précédemment :

expdate.setTime (expdate.getTime() + ( 10 * 24 * 60 * 60 * 1000)) ; // on rajoute dix jours en millisecondes

Nous avons alors tout le nécessaire pour écrire notre cookie sur le disque du client. Comme un cookie est une propriété de l'objet document (la page HTML chargée dans le navigateur) nous n'aurons plus qu'à écrire l'instruction :

document.cookie = Nom + "=" + Contenu + "; expires=" + expdate.toGMTString() ; // écriture sur le disque

L'instruction expdate.toGMTString() permet de transformer la date dans un format chaîne de caractères qui rend la lecture compatible avec MIE comme avec Netscape. La fonction .toGMTString() est une méthode de l'objet Date().

Les derniers paramètres étant omis (intentionnellement) ils prendront respectivement comme valeur :

path : le chemin d'accès de la page qui a écrit le cookie
domain : le nom du domaine du serveur d'où vient la page
secure : prendra la valeur "false" qui est la valeur par défaut

Tout ceci fera que ce cookie ne pourra être relu que par la page qui l'a écrit et par personne d'autre (paramètre path) seulement lorsque cette page sera hébergée sous le nom de domaine qui l'a écrit et par personne d'autre (paramètre domain) et que ce cookie ne nécessitera pas de protocol sécurisé (paramètre secure).

Pour vous en convaincre, cliquez ici et allez voir dans votre fichier des cookies (voir leçon sur les cookies). Comme vous risquez d'avoir pas mal de cookies déjà écrit sur votre disque dur dans le fichier concerné, il faudra que vous cherchiez un peu. Le plus simple est de supprimer purement et simplement le fichier des cookies de votre disque dur avant de lancer votre navigateur et de cliquer sur le lien ci-dessus.

Sous Netscape 4.7x vous verrez apparaître une chaîne de caractères qui ressemblera à :

FALSE /D|/E/_JavaScript/jvs FALSE 1012916523 MonCookie Hé... Vous avez un cookie sur votre disque !

Vous reconnaîtrez alors :
le chemin de la page : "/D|/E/_JavaScript/jvs" (pour moi du moins)
Le délai d'expiration du cookie en nombre de millisecondes entre le premier janvier 1970 à 00 heure 00 minute 00 seconde et le moment où le cookie sera effacé du disque dur : "1012916523". En clair, lorsqu'il se sera écoulé 1012916523 millisecondes depuis le premier janvier 1970 à 00 heure 00 minute 00 seconde, c'est à dire dans une dizaine de jours, le cookie s'effacera de lui même de votre disque.

Le nom du cookie : "MonCookie"
Le texte (contenu) du cookie : Hé... Vous avez un cookie sur votre disque !

Puisque je suis en local et pas sur un serveur, il n'y a pas de domain. l'un des deux "FALSE" représente le paramètre secure.

Voilà. Vous savez tout ce qu'il faut pour écrire des cookies sur le disque du du client. Là encore, faites en bon usage et amusez vous bien. La grande utilité de ce genre de sport est de transmettre des données d'une page HTML à une autre dans votre site.

Suite de la leçon.



Ce cours est enseigné par Philippe Médan 
dans le cadre de la formation des professionnels de l'INTERNET.
au CREFAC , 14 rue Scandicci, 93000 Pantin. Tél. : 01 48 46 51 99
au GITA-GRETA , Lycée Technologique Diderot 61, rue David D'Angers 75019 Paris Tél. : 01 40 40 36 27
au CESI à l'Ecole des ingénieurs, 116 Av Aristide Briand, BP 57, 92224 Bagneux CEDEX Tél. : 01 45 36 70 00
au CFA-AFIA Centre de Formation par l'Apprentissage spécialisé en Informatique DUT Licence MIAGE,
PUIO - Bâtiment 640 - Plateau du Moulon - 91405 Orsay Tél. : 01 69 15 35 19.

© Philippe Médan 1999-2007. Tous droits de reproduction réservés pour tous pays.