Lorsqu'un serveur Web répond à une requête de ressource, il peut inclure un en-tête Set-Cookie
dans sa réponse. Cet en-tête indique à votre navigateur de stocker un cookie. Exemple : Set-Cookie:cat=tabby
.
La section Que sont les cookies ? explique comment fonctionnent les cookies.
En plus de fournir un nom et une valeur de cookie, Set-Cookie
peut inclure des attributs permettant de contrôler si les cookies sont définis et quand ils expirent. Les attributs des cookies sont séparés par des points-virgules. Exemple :
Set-Cookie:cat=tabby; Secure; HTTPOnly; Expires=Tue, 31 Dec 2999 23:59:59 GMT;
Ce document explique les attributs de cookie les plus importants :
L'article Utiliser les cookies HTTP explique les attributs des cookies de manière plus technique.
Sécurisé
Si un en-tête Set-Cookie
inclut Secure
, le cookie ne sera inclus que dans les requêtes chiffrées qui utilisent le protocole HTTPS. Il ne sera pas inclus dans les requêtes HTTP. Cela peut aider à arrêter les attaques de l'intercepteur, où un pirate informatique intervient secrètement dans les communications entre le navigateur et le serveur pour transmettre des informations et potentiellement les modifier.
HTTPOnly
Si un en-tête Set-Cookie
inclut HTTPOnly
, JavaScript ne peut pas accéder au cookie, par exemple en utilisant document.cookie
. Cela permet de se protéger contre certains types d'attaques ciblant les cookies.
SameSite
Une demande de ressource provenant d'un site différent de celui que vous consultez est une requête intersite. Un cookie défini en réponse à une requête multisite est un cookie tiers.
L'attribut SameSite
détermine si un cookie tiers sera inclus dans une requête. Il peut prendre trois valeurs : Strict
, Lax
ou None
.
En savoir plus : Que sont les cookies tiers ?
Strict
Le cookie ne sera envoyé qu'en réponse aux requêtes d'une page du site d'origine du cookie. Par exemple, imaginons qu'un utilisateur visite cats.example
et qu'un cookie est défini avec l'attribut SameSite=Strict
. Plus tard, l'utilisateur se trouve sur un autre site et suit un lien vers une page sur cats.example
. Le cookie défini ne sera pas inclus dans cette requête.
Lax
Cela fonctionne de la même manière que Strict
, sauf que le navigateur inclut également le cookie lorsque l'utilisateur suit un lien vers le site d'origine du cookie. (Dans l'exemple Strict
précédent, le cookie serait inclus lorsque l'utilisateur suivrait le lien vers cats.example
.) Lax
est la valeur par défaut si aucun attribut SameSite
n'est inclus dans un en-tête Set-Cookie
.
Aucun
Aucune contrainte : le cookie sera inclus dans une requête, qu'elle soit intersite ou non. Avec SameSite=None
, le cookie doit également comporter l'attribut Secure
.
Partitionnée
Cet attribut vous permet d'activer le stockage partitionné pour un cookie, avec un "pot de cookies" distinct par site de premier niveau. Le cookie est doublement clé, par le site de premier niveau et par le domaine qui le définit.
Par exemple, imaginez que les sites Web A et B incluent tous les deux un iFrame provenant du site Web C. Un ensemble de cookies partitionnés défini par l'iFrame sur le site Web A n'est pas accessible par l'iFrame sur le site Web B : le cookie AC est distinct du cookie BC.
Les cookies avec un attribut Partitioned
sont appelés CHIPS (Cookies Having Independent Partitioned State).
Les cookies partitionnés doivent comporter l'attribut Secure
.
En savoir plus : Cookies Having Independent Partitioned State
Expires et Max-Age
Vous pouvez spécifier une date et une heure Expires
ou une durée Max-Age
en secondes après lesquelles un cookie doit être supprimé et ne plus être envoyé. Exemple :
Set-Cookie:cat=tabby; Expires=Tue, 31 Dec 2999 23:59:59 GMT;
Set-Cookie:cat=tabby; Max-Age=86400
Si vous ne spécifiez pas d'attribut Max-Age
ou Expires
, un cookie sera supprimé à la fin de la session en cours. Ce type de cookie est parfois appelé cookie de session.
Domaine
Si un en-tête Set-Cookie
comporte un attribut Domain
, le cookie sera inclus dans les requêtes envoyées au domaine spécifié et à l'un de ses sous-domaines.
Si un en-tête Set-Cookie
ne comporte pas d'attribut Domain
, le cookie ne sera pas inclus dans les requêtes adressées aux sous-domaines.
En d'autres termes, l'inclusion de l'attribut Domain
réduit les restrictions de domaine.
Par exemple, avec une réponse du site Web cats.example
:
Set-Cookie:cat=tabby
Le cookie ne sera inclus que dans les requêtes adressées àcats.example
.Set-Cookie:cat=tabby; Domain=cats.example
Le cookie sera inclus dans les requêtes adressées àcats.example
, ainsi que dans toutes les requêtes de ressources sur des sous-domaines tels quefluffy.cats.example
ouuser.assets.cats.example
.
Chemin
Si un attribut Path
est inclus dans un en-tête de réponse Set-Cookie
, le cookie défini ne sera inclus que dans les requêtes envoyées aux URL (sur le site qui a défini le cookie) correspondant à la valeur Path
.
Exemple :
Set-Cookie:cat=tabby; Path=/articles
Le cookie sera inclus dans une requête pour tout chemin d'URL commençant par/articles
:
✅https://cats.example/articles/tabby/index.html
✅https://cats.example/articles/breeds/tabby/index.html
❎https://cats.example/images/tabby.jpg
❎https://cats.example/en/articles/tabby/index.html
Set-Cookie:cat=tabby; Path=/
Toutes les requêtes envoyées à une URL du site incluront le cookie.
Si un en-tête de réponse Set-Cookie
n'a pas de valeur Path
, le cookie ne sera inclus que dans les requêtes adressées au même répertoire. Par exemple, imaginez qu'un cookie cat=tabby
soit défini en réponse à une requête pour cats.example/images/tabby.jpg.
. Si aucun Path
n'est défini, le cookie ne sera inclus qu'avec les requêtes de fichiers dans le répertoire cats.example/images
.
Démonstrations
- 1pc.glitch.me : démonstration des cookies propriétaires
- 3pc.glitch.me : démonstration des cookies tiers
Outils
- Afficher, ajouter, modifier et supprimer des cookies dans les outils pour les développeurs Chrome
- Privacy Sandbox Analysis Tool
En savoir plus
- Recettes de cookies propriétaires
- Que sont les cookies ?
- Que sont les cookies tiers ?
- Requête et réponse HTTP
- Outils pour les cookies
- Démonstrations de cookies
- Utiliser des cookies HTTP
- Explication des cookies SameSite
- OWASP : cookies