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.

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 de cookie 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 :

La section Utiliser des cookies HTTP explique les attributs de cookie de manière plus technique.

Secure

Si un en-tête Set-Cookie inclut Secure, le cookie ne sera inclus qu'avec 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 intermédiaires, où un pirate 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 requête 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 intersite est un cookie tiers.

L'attribut SameSite contrôle si un cookie tiers sera inclus dans une requête. Il comporte trois valeurs possibles : 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 qui se trouve sur le site d'origine du cookie. Par exemple, imaginez qu'un utilisateur consulte 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 de cats.example. Le cookie défini ne sera pas inclus dans cette requête.

Lax

Cette option 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 suit 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.

None

Aucune contrainte : le cookie sera inclus dans une requête, qu'elle soit intersite ou non. Avec SameSite=None, le cookie doit également avoir l'attribut Secure.

Partitioned

Cet attribut vous permet d'activer un cookie pour le stockage partitionné, avec un "pot de cookies" distinct par site de premier niveau. Le cookie est collecté deux fois, par le site de premier niveau et par le domaine qui le définit.

Par exemple, imaginez que le site Web A et le site Web B incluent tous deux un iFrame du site Web C. Un cookie partitionné 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 lorsque le service 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 avoir 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 un Max-Age en secondes, après quoi 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 est supprimé à la fin de la session en cours. Ce type de cookie est parfois appelé cookie de session.

Domain

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 envoyé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 envoyées à cats.example
  • Set-Cookie:cat=tabby; Domain=cats.example
    Le cookie sera inclus dans les requêtes envoyé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

Path

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 !) qui correspondent à la valeur Path.

Exemple :

  • Set-Cookie:cat=tabby; Path=/articles
    Le cookie sera inclus pour une requête envoyée à n'importe quel chemin de l'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 à n'importe quelle URL du site incluront le cookie.

Si un en-tête de réponse Set-Cookie ne comporte pas de valeur Path, le cookie ne sera inclus que dans les requêtes envoyées au même répertoire. Par exemple, imaginez qu' un cat=tabby cookie soit défini en réponse à une requête envoyée à cats.example/images/tabby.jpg. Si aucun Path n'est défini, le cookie ne sera inclus que dans les requêtes envoyées aux fichiers du répertoire cats.example/images.

Démonstrations

Outils

En savoir plus