Lire un cookie

Transcription

Lire un cookie
Lire un cookie - Javascript
Nom donné lors de la déclaration de la fonction : (simplement une suggestion…)
Pour l'écriture d'un cookie :
function setCookie() ou function ecrireCookie()
Pour la lecture d'un cookie :
function getCookie() ou function lireCookie()
L'appel de la fonction :
getCookie(leNomDuCookie);
Exemple : getCookie("dejavenu");
Trouver un cookie précis parmi plusieurs :
Code pour afficher le contenu d'un cookie : document.write(document.cookie);
dejavenu=oui; nomUtil=Paul
0
8
14
9
21
22
// ici j'ai 2 cookies pour mon domaine.
26
// 26 indique la longueur du cookie
// position (index) du début de la valeur du cookie
Remarquez le point-virgule « ; » qui sépare les deux cookies. Par contre, le dernier cookie n'a pas de
point-virgule « ; ». Il a été supprimé par défaut. Cela nous permet de savoir qu'il n'y a pas d'autres cookies
(que nous sommes en fin de chaîne).
En premier lieu, comme document.cookie est une chaîne de caractères (String) qui contient une liste de
tous les cookies, on peut lui affecter des méthodes propres à l'objet String. Le cookie est donc soumis aux
mêmes lois que les autres String; à savoir l'index, c'est-à-dire la position, du premier caractère étant 0 etc.
Étapes pour récupérer un cookie spécifique :
e
Supposons que le nom du cookie passé en paramètre est : "nomUtil", selon notre exemple, le 2 cookie.
1. Récupérer l'index (position) du premier caractère du nom du cookie dans une variable en utilisant
indexOf(). La méthode indexOf() retourne un nombre positif indiquant la position du début du cookie
ou -1 s'il ne l'a pas trouvé.
indexNom = document.cookie.indexOf(nomDuCookie);
// la variable nomDuCookie contient nomUtil
contenu de la variable indexNom, dans le cas présent, s'il trouve nomUtil : à l'index (position) 14
2. Récupérer l'index du premier caractère de la valeur du cookie nomUtil.
indexValeur = document.cookie.indexOf("=", indexNom) + 1;
// à l'index (position) 22
e
indexOf("=", indexNom) : le premier argument indique la chaîne recherchée, le 2 argument indique à
partir de quelle position la recherche sera effectuée.
On recherche le caractère = qui sépare le nom du cookie de sa valeur (nom=valeur). Il trouvera donc
l'index 21 pour le =. Vu que nous voulons le contenu seulement n'incluant pas le = nous ajoutons + 1
pour avoir le début réel de la valeur du cookie ce qui donne l'index 22.
3. Récupérer l'index de fin de la valeur du cookie. On se rappelle que chaque cookie est séparé par un
point-virgule « ; », excepté le dernier cookie. Il est donc possible de trouver la fin de la valeur d'un
cookie en cherchant le « ; » qui le termine. Par contre, si c'est le dernier, il ne trouvera pas la chaîne
recherchée, car le « ; » n'existe pas pour le dernier cookie.
Hiver 2008
lireCookie.doc
1/3
indexFin = document.cookie.indexOf(";", indexValeur);
// -1 s'il ne trouve pas la chaîne, ici le ;
e
Le 2 argument de indexOf() indique à partir de quelle position la recherche sera effectuée, ici à partir
de la position 22, valeur trouvée dans le code précédent.
Dans le cas présent, indexOf() retourne la valeur -1, car il n'a pas trouvé le « ; ». Cela signifie que le
cookie recherché est le dernier de la chaîne document.cookie.
Si indexFin vaut -1, il faudra donner une valeur valide à indexFin pour pouvoir extraire la valeur du
cookie en utilisant la propriété length de l'objet String.
indexFin = document.cookie.length;
// 26 indique la longueur de la chaîne
length : compte le nombre de caractères dans la chaîne. Ici, il y a 26 caractères au total dans
document.cookie. Comme la propriété length commence à compter à partir de 1, la valeur de length
sera un index plus grand que le dernier caractère.
dejavenu=oui; nomUtil=Paul
1
26
// length compte le nombre de caractères 1, 2, 3, … 26
// 26 caractères au total dans la chaîne
Ne pas se mêler avec l'index (la position) de départ de la chaîne (String) qui commence à 0
dejavenu=oui; nomUtil=Paul
0
8
14
21
26
// 26e caractères est exclus
4. Maintenant que nous avons trouvé l'emplacement du début et de la fin du cookie, il faut extraire
l'information. La méthode substring() de l'objet String permet d'extraire un fragment d'une chaîne,
entre une position de début et une position de fin.
return unescape(document.cookie.substring(indexValeur, indexFin));
document.cookie.substring(indexValeur, indexFin) : cette partie de code extrait la valeur du cookie à
partir de la position du début de la valeur (indexValeur) jusqu'à la fin de la valeur du
cookie exclusivement (indexFin).
unescape : rétabli les caractères spéciaux ou accentués, sous leur forme originale. Donc, reconvertit
une chaîne en caractères après une opération escape().
return :
mot clé utilisé dans le corps d'une function pour renvoyer le résultat d'un traitement. Dans
le cas présent retourne la valeur qui a été extraite du cookie, c'est-à-dire : Paul.
À noter : Il est possible d'utiliser substr() au lieu de length
substr(début,longueur) : En l'absence du paramètre "longueur", la méthode renvoie le reste de la chaîne,
à partir de la position de début.
return unescape(document.cookie.substr(indexValeur));
Voir deux exemples de code complet…
Hiver 2008
lireCookie.doc
2/3
Code en entier pour récupérer le contenu d'un cookie (avec substring() et length) :
function getCookie(nomDuCookie)
{
indexNom = document.cookie.indexOf(nomDuCookie);
indexValeur = document.cookie.indexOf("=", indexNom) + 1;
indexFin = document.cookie.indexOf(";", indexValeur);
// nom=valeur
// position du nom du cookie
// position du début de sa valeur
// position de la fin du cookie ;
// Différent de -1 c'est qu'il a trouvé le nom du cookie.
// Il entre dans le if seulement si le cookie existe, alors il va extraire les données.
if (indexNom != -1)
{
if (indexFin == -1)
{
indexFin = document.cookie.length;
}
// si -1 c'est qu'il ne l'a pas trouvé de ;
// indiquant la fin du cookie
// longueur du cookie
return unescape(document.cookie.substring(indexValeur, indexFin));
}
else
{
// retourner une valeur si le cookie n'existe pas soit : null ou "" (vide) false ou un message...
return "";
// return "Le cookie n'existe pas"; ou return null; ou return false
}
}
Autre façon pour récupérer le contenu d'un cookie (avec subtring() et substr()) :
function getCookie(nomDuCookie)
{
indexNom = document.cookie.indexOf(nomDuCookie);
indexValeur = document.cookie.indexOf("=", indexNom) + 1;
indexFin = document.cookie.indexOf(";", indexValeur);
// Seulement si le cookie existe qu'il va extraire les données...
if (indexNom != -1)
{
if (indexFin != -1)
{
// si c'est différent de -1 : indexFin nous indiquera l'indice de fin de la valeur du cookie recherché.
return unescape(document.cookie.substring(indexValeur, indexFin));
}
else
{
// si indexFin = -1 : c'est qu'il n'y a pas d'autre cookie après celui que l'on recherche.
// substr renvoie le reste de la chaîne, à partir de la position de indexValeur.
return unescape(document.cookie.substr(indexValeur));
}
}
else
{
// si le cookie n'existe pas.
return "aucun cookie";
}
}
Hiver 2008
lireCookie.doc
3/3

Documents pareils