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