Apprendre JS : Cookies
Les cookies sont aujourd'hui incontournables sur le web. Voici comment les manipuler en JavaScript.
Quâest-ce quâun cookie ?
Avant de rentrer dans le dĂ©tail de la manipulation des cookies en JavaScript, il est important de comprendre ce quâest un cookie, et quel rĂŽle il joue sur un site web.
Manipuler les cookies en JavaScript
Les cookies sont enregistrés dans des paires nom-valeur comme : user=Athios
(à la maniÚre des objets littéraux JS).
On peut trÚs facilement manipuler les cookies en JavaScript avec la propriété document.cookie
.
Création
On créé un cookie avec la propriété .cookie
Ă laquelle on affecte un couple nom-valeur dĂ©fini au sein dâune chaĂźne de caractĂšres.
// Création du cookie "user" avec pour valeur "Athios"
document.cookie = "user=Athios";
En plus dâune paire nom=valeur, on va Ă©galement pouvoir dĂ©finir des options pour nos cookies.
Portée
Les directives domain
et path
dĂ©finissent la portĂ©e dâun cookie ; autrement dit sur quelles URLs les cookies doivent ĂȘtre accessibles.
Domaine dâaccessibilitĂ©
Lâoption domain
permet de prĂ©ciser le(s) domaine(s) sur le(s)quel(s) le cookie doit ĂȘtre accessible.
Si vous ne prĂ©cisez pas lâoption domain
lors de la crĂ©ation dâun cookie en JavaScript, le cookie sera accessible uniquement depuis le domaine (ou sous-domaine exact) de lâURL de la page en cours.
Les cookies créés sans spécification de domaine sont appelés cookies de domaine restreint.
Par exemple, si vous créez un cookie sur monsite.com
sans spécifier de domain
, ce cookie sera uniquement accessible lorsque lâutilisateur navigue sur des pages du domaine monsite.com
(par exemple monsite.com/blog
, monsite.com/shop
, etc.). Le cookie ne sera pas accessible depuis un sous-domaine comme sous-domaine.monsite.com
(tels que blog.monsite.com
, shop.monsite.com
, etc.).
En revanche, si vous créez un cookie en spécifiant domain=monsite.com
, alors tous ses sous-domaines seront inclus.
document.cookie = "user=Athios; domain=monsite.com";
Chemin
Il est Ă©galement possible de spĂ©cifier pour quelles URLs lâentĂȘte du cookie doit ĂȘtre envoyĂ©e avec lâoption path
.
Si path
nâest pas dĂ©fini, il sâagit du chemin actuel.
Par exemple, un cookie défini avec path=/shop
sera disponible dans les pages /shop
et /shop/âŠ
mais pas dans les pages /admin
ou /blog
.
document.cookie = "user=Athios; domain=monsite.com; path=/shop";
Durée
Par dĂ©faut, un cookie est supprimĂ© dĂšs que le navigateur est fermĂ© (fin de la session). Il est Ă©galement possible de prĂ©ciser une date dâexpiration pour un cookie, afin de le conserver plus longtemps pour pouvoir le rĂ©utiliser dans le futur.
Il y a deux maniĂšres de spĂ©cifier cette date dâexpiration :
- Avec lâoption
expires
, en définissant un objetDate
sur lequel on applique la méthodetoUTCString()
pour le formater en texte. - Avec lâoption
max-age
, en définissant un nombre en secondes à partir du moment actuel.
On va ainsi par exemple pouvoir définir un cookie qui devra expirer exactement 24h aprÚs sa création comme cela :
// DĂ©claration avec l'objet Date
let date = new Date(Date.now() + 86400000); // 86400000ms = 1 jour
document.cookie = "user=Athios; expires=" + date.toUTCString();
// DĂ©claration avec un nombre de secondes
document.cookie = "user=Athios; max-age=86400";
Modification
Il nâexiste pas de fonction permettant de modifier uniquement la valeur dâun cookie. Pour cela, on procĂ©dera Ă la redĂ©claration dâun cookie existant.
// Modification du cookie "user" avec pour nouvelle valeur "John"
document.cookie = "user=John";
Suppression
Pour supprimer un cookie, la mĂ©thode la plus simple est de le redĂ©clarer sans valeur et en prĂ©cisant cette fois-ci une date dâexpiration passĂ©e ou encore max-age=0
.
document.cookie = 'user=; expires=Thu, 01 Jan 1970 00:00:00 UTC';
document.cookie = 'user=; max-age=0';
Lecture
Il est possible de lire tous les cookies déposés sur un domaine avec document.cookie
.
console.log(document.cookie);