Trucs & FAQ
Accueil
Plan

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 ou le type de navigateur utilisé sont connus indépendamment des cookies !
Exemple :


Mais jamais un cookie ne pourrra récupérer à votre insu , par exemple, votre adresse Email
(à 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):

  • Netscape
dans un fichier unique "cookie.txt"
Ex. : D:\Program Files\Netscape\Users\Jean_Claude_Bellamy\cookies.txt
  • MSIE (4 et +)
dans plusieurs fichiers adresse internet "Cookie:<username>@<serveur>" (un par serveur)
Ex. : C:\WINNT\Profiles\Bellamy\Temporary Internet Files\Cookie:bellamy@www.toto.com

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;

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.
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

//On est dans le document http://www.toto.com/schmurz/index.htm
//Ce cookie sera "visible" à partir de http://www.toto.com/schmurz/news.htm
//mais ne le sera pas depuis http://www.toto.com/grouchard/truc.htm

document.cookie="henri=logo_en_flammes;expires=Wed, 31-Dec-1997 23:59:59 GMT;path=schmurz";

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

//On est dans http://www.toto.com/schmurz/index.htm
//On désire que le cookie "henri" soit lisible depuis le site "www.hal.com"
//www.toto.com ne pourra plus lire le cookie, par contre www.hal.com le pourra
document.cookie="henri=logo_en_flammes;expires=Wed, 31-Dec-1997 23:59:59 GMT;domain=www.hal.com";

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 : 4).

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 :

<script LANGUAGE="JavaScript">
//Création ou réaffectation d'un cookie
//dateExp est une chaine date d'expiration du cookie

var dateExp="Sat, 01-Jan-2000 08:00:00 GMT";
//les cookies créés ici n'existeront plus après le 1er janvier de l'an 2000

function newCookie(name,value) {
document.cookie=name+"="+value+";expires="+dateExp;
}
//Lecture d'un cookie
//retourne une chaine vide si le cookie n'existe pas
function getCookie(nameCookie) {
var cookieTrouve=false;
var debut=0;
var fin=0;
var ch=document.cookie;
var i=0;
while (i<=ch.length) {
debut=i;
fin=debut+nameCookie.length;
if (ch.substring(debut,fin)==nameCookie) {
cookieTrouve=true;
break;
}
i++;
}
if (cookieTrouve) {
debut=fin+1;
fin=document.cookie.indexOf(";",debut);
if(fin<debut)
fin=document.cookie.length;
return document.cookie.substring(debut,fin);
}
return "";
}
</script>

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 :

<a href="javascript:newCookie('schmurz','plops')"><img src="/toto.gif">Cliquez-ici</a>

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 :

<script LANGUAGE="JavaScript">
document.write(getCookie('schmurz'));
</script>

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.

<script LANGUAGE="JavaScript">
//inclure ici les fonctions newCookie et getCookie
//.........
function recFavoritePage() {
//URL de la page en cours
var URL=this.location.href;
//mémorisation de cette page dans le cookie 'Favorite'
newCookie('Favorite',URL);
}
</script>

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

<a href="javascript:recFavoritePage()">
<img src="favorite.gif">Cliquez-ici si cette page est votre favorite</a>
<script LANGUAGE="JavaScript">
//.....
function goFavoritePage() {
//URL de la page favorite
var URL=getCookie('Favorite');
//Saut vers cette page (si non vide)
if (URL!="") {document.location.href=URL;}
}
</script>

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

<a href="javascript:goFavoritePage()">
<img src="/favorite.gif">Votre page favorite</a>

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 :
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 !)


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!):

Accueil