Un cookie est un ensemble d'infos stockés sur le disque de l'utilisateur pour faciliter la navigation.
Il ne peut contenir que ce que l'utilisateur a bien voulu donner. Les autres renseignements tels que l'adresse IP, le système d'exploitation ou le type de navigateur utilisé sont connus indépendamment des cookies !
Exemple :


Mais jamais un cookie ne pourra récupérer à votre insu , par exemple, votre adresse Émail (à moins que vous ne la communiquiez explicitement dans un formulaire)
Un cookie est une information de type "texte" qui est stockée, à l'aide d'un JavaScript, sur la machine du client, sous des formes diverses suivant le navigateur utilisé (liste non exhaustive):

  • Opera
dans un fichier unique "cookiesx.dat"
Ex. : P:\Program Files\Opera\cookies4.dat
  • Netscape
dans un fichier unique "cookie.txt"
Ex. : Q:\Program Files\Netscape\Users\jcb_local\cookies.txt
  • Internet
    Explorer
dans plusieurs fichiers (un par serveur) (sauf V3.0 sous NT3.51)
Ex. : E:\Documents and Settings\BELLAMY\Cookies\bellamy@springfield[1].txt 
Version IE Version Windows Répertoire
1.5 NT %systemroot%\cookie.jar
2.0 Toutes \Program Files\Plus!\Microsoft Internet\cookies.txt
3.0 NT 3.51 Répertoire d'installation de IE (Fichier emcookie.dat.)
95 \Windows\Cookies\ <username>@<sitename>.txt
NT %systemroot%\Cookies\<username>@<sitename>.txt
4.x  9x \%windir%\Cookies\ <username>@<sitename>.txt
NT \%systemroot%\profiles\%username%\Cookies\ <username>@<sitename>.txt
5.x
6.x
9x \%windir%\Cookies\ <username>@<sitename>.txt
NT \%systemroot%\profiles\%username%\Cookies\ <username>@<sitename>.txt
2000/XP %userprofile%\Cookies\<username>@<sitename>.txt

NB: tous les scripts (JavaScripts) présents dans ce document HTML sont librement utilisables et copiables !

Structure d'un cookie

Il comprend :

Un nom (obligatoire)

défini dans le champ name, c'est une valeur alphanumérique quelconque

document.cookie=name+"="+value;

auquel peuvent s'ajouter d'autres paramètres facultatifs , à savoir :

Une date d'expiration

définie dans le champ expires, indique jusqu'à quelle date le cookie peut être utilisé. C'est une valeur date exprimée sous la forme Sun,JJ-MM-AA HH:MM:SS GMT, le jour de la semaine étant en anglais abrégé (Sun, Mon, Tue, ...)
Si on ne précise pas de date d'expiration, le cookie "meurt" à la fin de la session en cours du navigateur.

// date d'expiration le 1er Janvier de l'an 2000 :
var dateExp="Sat, 01-Jan-2000 08:00:00 GMT";
document.cookie=name+"="+value+";expires="+dateExp;

La date est stockée dans le cookie sous la forme d'un nombre représenté en numérotation décimale.

Sous NETSCAPE :
C'est le nombre de secondes écoulées entre le 01/01/1970 à 00:00:00 GMT et la date d'expiration du cookie.

# Netscape HTTP Cookie File
# http://www.netscape.com/newsref/std/cookie_spec.html
# This is a generated file! Do not edit.
springfield FALSE / FALSE 993942000 indexen 1
springfield FALSE / FALSE 993942000 lang fr

Par exemple, dans le cas d'un cookie expirant le 01/07/2001, sa date d'expiration est représentée par le nombre 993942000.
Si vous disposez du tableur Microsoft Excel, vous pouvez utiliser les formules suivantes pour convertir aisément une date codée en sa représentation explicite :

  A Commentaires ou formules à écrire 
1

993942000

Le nombre à expliciter
2

1

Le fuseau horaire GMT (en France : +1)
(heure d'été non observée)
3

37071

=A1/86400+DATEVAL("01/01/1970")+TEMPSVAL(A2&":0:0")
4 29/6/2001 0:0:0 =JOUR(A3)&"/"&MOIS(A3)&"/"&ANNEE(A3)&" "&HEURE(A3)&":"&MINUTE(A3)&":"&SECONDE(A3)

Téléchargement de la feuille Excel : cookiesNetscape.xls

Sous Internet Explorer :

lang fr springfield/ 0 1671305216 29426104 749607552 29352488 *
acceptCookies OK springfield/ 0 985257984 29424696 475900496 29351424 *

Là, c'est beaucoup moins évident! Le MSDN indique que la date est contenue (apparemment) dans le 2ème nombre d'une série de 4, mais reconnaît lui-même que c'est sous la forme d'un charabia difficilement compréhensible! ("...some gobbledy-gook that mostly refers to when the cookie expires on the client..." - Robert Carter - MSDN Technical Writer)

J'ai essayé de trouver l'algorithme, mais en vain. La fonction n'est pas linéaire. Par exemple, si on incrémente la date d'une journée, le 2ème nombre augmente de 201, si on passe à l'année suivante, le nombre augmente de 73425, ...mais ce ne sont pas toujours les mêmes valeurs (parfois 202 ou 73426, de plus , 201*365 = 73365, on ne retrouve pas exactement l'autre valeur) !

Voici quelques valeurs que j'ai pu isoler :

Valeur Date correspondante
29395929  01/01/2001
29469355  01/01/2002
29542780  01/01/2003
29616205 01/01/2004

Un chemin

défini dans le champ path, indique la partie de l'URL pour lequel le cookie est valable. Si on ne précise pas de chemin, le cookie est visible partout sur le site à partir du répertoire où il a été créé.
Par exemple, sur le serveur www.toto.com, on désire que le cookie de nom henri, initialisé à logo_en_flammes ne soit accessible que pour les documents situés dans le répertoire schmurz
Inversement, si on veut qu'un cookie créé depuis un sous-répertoire soit visible de partout dans le site, y compris le(s) répertoire(s) parent(s), il suffit de déclarer un path égal à "/
Si le champ path est absent, c'est équivalent à déclarer un chemin égal au répertoire courant.

Un domaine

défini dans le champ domain, indique le domaine (=le serveur, ou une partie de l'adresse du serveur) pour lequel le cookie est valable. Effectivement, un serveur peut créer un cookie qui sera lu par un autre serveur. C'est un cas de figure assez rare, et d'intérêt pour le moins limité, voire "bizarre", où un site "fonctionnerait" pour un autre. Si on ne définit pas de domaine, c'est celui du serveur créant le cookie qui est pris en compte

Un navigateur comme Netscape a prévu la possibilité d'interdire ce genre d' "entente" entre serveurs. Cette distinction n'existe pas dans MSIE (versions actuelles : 5).

Le cas "DoubleClick"

Ce procédé "d'entente" entre sites semble cependant utilisé par la compagnie "DoubleClick". Il  est d'ailleurs signalé, dans un article intitulé "The Dark Side", par le site CookieCentral, consacré à l'étude des cookies. 
Il est fort probable que vous ayez un cookie de DoubleClick sur votre machine, alors que vous n'avez vraisemblablement JAMAIS visité ce site! Il a été créé lors de la visite d'autres sites, DoubleClick faisant office de "centralisateur" d'informations.

Parmi ces sites, on relève(liste non exhaustive!) :

Le fait d'aller sur l'un de ces sites va (re)générer un cookie DoubleClick, qui permettra de définir un "profil" d'utilisateur.

Un attribut de sécurité

défini par le "flag" secure, indique (s'il existe) que le cookie ne sera transmis quesi la connexion vers le serveur est sécurisée (protocole HTTPS et non pas HTTP)

//le cookie "henri" ne sera transmis que si la connexion est effectuée via https
document.cookie="henri=logo_en_flammes;expires=Wed, 31-Dec-1997 23:59:59 GMT;secure";

Limitations

Elles concernent la taille et le nombre de cookies pouvant être stockés sur chaque poste client

Accès à un cookie dans un document HTML

L'information est stockée ou lue depuis ou vers un document HTML via un script adéquat, en utilisant le champ cookie de l'objet document. Ce champ (ou propriété) cookie contient une suite de paires nom/valeur de chaines alphanumériques , séparées par des points-virgules (cf. plus haut). Par exemple, les fonctions de base pour créer et lire un cookie peuvent s'écrire ainsi :

Dans le document HTML où on aura inséré le code ci-dessus, il suffit de rajouter d'autres scripts d'écriture et/ou lecture, par exemple :

Cette ligne crée le cookie de nom schmurz et lui affecte la valeur plops quand on clique sur l'image toto.gif
Dans un autre document HTML, en ayant réécrit le script contenant les fonctions de base initiales, l'ajout du script suivant provoquera l'affichage de la valeur du cookie schmurz :

Exemple simple

Soit un site avec une page d'accueil, puis un certain nombre d'autres pages, toutes de même niveau, et l'on veut que l'utilisateur "élise" une page favorite, qu'il pourra atteindre ensuite d'un simple click depuis la page d'accueil pour les visites futures.

suivi de ce lien, à l'endroit où l'on veut placer le bouton d'action de mémorisation

suivi de ce lien, à l'endroit où l'on veut placer le bouton de branchement vers la page favorite :

Test

(Evidemment, pour que ce test fonctionne, les cookies ne doivent pas être désactivés dans votre navigateur !)
Actuellement, les cookies que votre navigateur a (éventuellement) enregistrés en rapport avec le serveur sont les suivants (en caractères gras, le dernier saisi) :

1) Tapez un nom de cookie quelconque :
2) Tapez un contenu quelconque pour ce cookie :
     (vide pour effacer le cookie)
3) Appuyez sur ce bouton :
4) Examinez alors le nouveau contenu des cookies ci-dessus

(NB: il n'y a aucun CGI-BIN dans ce formulaire ! Uniquement du JavaScript !)

Internet Explorer 5 (et +), Base De Registres et cookies

A partir de la version 5, Internet Explorer permet un paramétrage très fin des options de sécurité, et en particulier des cookies
On peut ainsi définir les règles en fonction :


On peut alors choisir, pour chaque cas :

Ces paramètres sont stockés dans la base de registres (BDR), ce qui peut être mis à profit pour créer des fichiers d'inscription dans le registre (extension .reg). On pourra ensuite leur créer des raccourcis, déposés sur le bureau, permettant un changement rapide de configuration d'Internet Explorer..

La clef principale est :
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones

Elle contient 5 sous-clefs, correspondant chacune à une zone :

Sous-clef Description Commentaires
0 Poste de travail L'ordinateur local
1 Intranet local Contient tous les sites Web présents sur l'intranet de l'ordinateur.
2 Sites de confiance Contient les sites Web de confiance ne risquant pas d'endommager l'ordinateur.
3 Internet Contient tous les sites Web non placés dans d'autres zones.
4 Sites sensibles Contient les sites Web pouvant endommager l'ordinateur ou les données.

Chaque sous-clefs contient à son tour des entrées définissant les règles à adopter.
Dans le cas des cookies, ce sont les suivantes :

Entrée Type de cookies Valeurs possibles Règle correspondante
1A02 Persistants dword:00000000 Accepter
dword:00000001 Demander
dword:00000003 Refuser
1A03 Session dword:00000000 Accepter
dword:00000001 Demander
dword:00000003 Refuser

Exemple :
On veut créer un fichier IEcookies.reg paramétrant Internet Explorer au niveau des cookies de la façon suivante : 

Ce fichier aura le contenu suivant :

Outil d'affichage des cookies sous IE

J'ai conçu un utilitaire qui permet d'afficher, sous Internet Explorer seulement, la liste des cookies créés par le site en cours d'affichage, et cela directement depuis le menu contextuel de IE, par un simple click.

Il est décrit (et téléchargeable gratuitement) dans le document consacré à Internet

En guise de conclusion...

Les cookies permettent des raccourcis très "élégants" et très pratiques, dont il serait dommage de se passer.
Ce ne sont que des fichiers contenant quelques lignes de texte, et rien d'autre.
Toutes les informations qu'ils contiennent auront été volontairement données par vous-même.
Si par hasard un site WWW vous demande des renseignements plus ou moins confidentiels tels que votre compte bancaire, la liste des logiciels que vous utilisez,..., c'est le site lui-même (et surtout son responsable) qui est à mettre en cause, et non pas les cookies qu'il pourrait éventuellement créer.

Pour en savoir plus (liste non exhaustive!):