TUTORIELS 
Gérer les cookies en ASP
Très simples à manipuler en ASP, les cookies sont capables de rendre à la fois service aux internautes et aux webmasters. Découvrons quelles fonctions permettent d'agir sur ces petits fichiers texte.  ( 23 novembre 2001)
 

Vous savez tous sans doute à quoi ressemble un cookie, ou tout du moins à quoi ils servent. Rappelons tout de même brièvement que ces petits fichiers texte sont utilisés pour détecter votre passage sur un site et prennent la forme soit d'un fichier par cookie comme sous IE, soit d'un fichier unique ("cookies.txt") sous Netscape ou Mozilla.
Si certains d'entre eux sont inutiles pour l'internaute, ils ne sont pas perdus pour tout le monde. Ainsi la publicité utilise parfois des cookies à des fins statistiques.
Ne les désactivez pas dans vos navigateurs et certains d'entre eux vous rendront service. C'est le cas de ceux qui par exemple vous évite d'avoir à rentrer à nouveau votre login si vous êtes déjà passé par le site (à condition que n'ayez pas supprimé le cookie en question de votre disque).

Après le Php, les servlets et le Javascript, voyons comment ASP gère les cookies. Nous les avions déjà rencontré en ASP lors du tutoriel "Construire un sondage en ASP sans base de données", et en revoyons les bases ici.

La création du cookie

La syntaxe la plus simple pour créer et attribuer une valeur à un cookie en ASP est la suivante :

Response.Cookies("mon_cookie") = "sa_valeur"

Si la syntaxe vous paraît étrange, un petit tour vers le tutoriel "les objets ASP" peut aider. Nous utilisons ici la "collection Cookies" de l'objet "Response". Plus tard, nous nous servirons de cette même collection, mais pour l'objet "Request".

Alors que l'objet "Request" ne fait que lire, l'objet "Response" peut écrire, modifier ou supprimer un cookie.

Nous venons de créer ici un cookie temporaire dont la durée de vie n'excèdera pas celle de l'instance du navigateur qui l'a crée. Ce cookie n'est pas écrit sur le disque dur.

Pour obtenir un cookie permanent il suffit de rajouter à notre cookie la propriété "Expires", ce qui donne au final :

Response.Cookies("mon_cookie") = "sa_valeur"
Response.Cookies("mon_cookie").Expires = Now() + 30

Nous récupérons un cookie dont la durée de vie est de trente jours. Sa durée de vie peut également se définir de la sorte :

Response.Cookies("mon_cookie").Expires = #17/03/2004#

Ce cookie restera "valable" jusqu'au 17 mars 2004...

Attention, les cookies figurent dans les en-têtes HTTP de vos pages, ce qui implique qu'ils soient définis avant que toute autre donnée ne soit envoyée au navigateur.
Si vous ne respectez pas cette contrainte et insérez par exemple du code HTML avant de définir votre cookie vous obtiendrez un message de ce type :

Erreur d'en-tête ("Cannot add header information - headers already sent")
/cookies/cookies.asp, line xx
Les en-têtes HTTP sont déjà transmises au navigateur client. Toutes les modifications d'en-tête HTTP doivent être effectuées avant d'écrire le contenu de la page.

Ceci résume le comportement par défaut de IIS, jusqu'à sa version 5.0. Pour cette dernière version, IIS réagit différemment puisque par défaut aucune donnée de sortie n'est envoyé tant que la fin de la page n'a pas été atteinte. C'est le cas sous Windows 2000. Si vous utilisez ce sytème et souhaitez vérifier ce comportement, inscrivez du code HTML avant de déclarer votre cookie, et par défaut, tout se passera bien. Rajoutez maintenant...

Response.Flush

... à la suite de vos instructions HTML et vous obtenez le fameux message.

Sachez également que vous pouvez créer des cookies à valeurs multiples :

Response.Cookies("mon_cookie")("sous_élément") = "valeur_sous_élément"

Nous verrons dans un instant comment récupérer les valeurs contenues dans les cookies.

Enfin, pour spécifier le domaine ou le chemin d'accès d'un cookie, il existe les propriétés "domain" et "path". Attribuer la valeur "/" à "path" permet de rendre accessible le cookie à toutes les pages d'un site.


Lire un cookie

C'est un exercice très simple, beaucoup plus simple même qu'en JavaScript dans le cas des cookies à valeurs multiples.

On obtient la valeur d'un cookie "simple" grâce à l'objet Request :

Request.Cookies("nom_cookie")

Si on souhaite afficher le contenu de ce cookie on peut procéder ainsi :

Response.Write(Request.Cookies("nom_cookie"))

Et pour afficher la valeur d'un "sous-élément"...

Response.Write(Request.Cookies("nom_cookie")("nom_sous_element"))


Modifier le contenu d'un cookie

Il s'agit en fait d'écraser le contenu d'un cookie détecté comme déjà existant par un nouveau. Cela se passe de manière transparente, c'est la même instruction que pour créer le cookie. Si un cookie de même nom existe, son contenu est écrasé par le nouveau :

Response.Cookies("mon_cookie_deja_existant") = "sa_nouvelle_valeur"

Attention, pour un cookie à valeurs multiples, il est impossible de ne mettre à jour qu'une seule valeur. Dans un pareil cas :

Response.Cookies("mon_cookie")("sous_élément") = "new_valeur_sous_élément"

La valeur des éventuels autres sous-élements est effacée. Il convient donc de les stocker temporairement afin de pouvoir les réécrire une fois la mise à jour effectuée.


Supprimer un cookie

Voici deux méthodes pour supprimer un cookie :

Response.Cookies("mon_cookie") = ""
ou
Response.Cookies("mon_cookie").Expires = #01/01/1970#

La première méthode met "à vide" le cookie, ce qui revient à le supprimer, la seconde méthode attribue au cookie une date limite d'expiration qui est dépassée, le navigateur le supprime également.

 
[ Arnaud GadalJDNet
 
Accueil | Haut de page