Attributs des cookies

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.

Diagramme montrant que deux sites Web différents intégrant un tiers commun ne partageront plus les cookies de ce tiers.
Avec le partitionnement des cookies, un service tiers qui définit un cookie lorsqu'il est intégré à un site de premier niveau ne peut pas accéder à ce même cookie lorsqu'il est intégré à d'autres sites de premier niveau.

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 que fluffy.cats.example ou user.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

Outils

En savoir plus