--- title: Set-Cookie slug: Web/HTTP/Headers/Set-Cookie tags: - Cookies - HTTP - Reference - Response - header - samesite translation_of: Web/HTTP/Headers/Set-Cookie ---
{{HTTPSidebar}}

L'en-tête de réponse HTTP Set-Cookie est utilisé pour envoyer un cookie depuis le serveur à l'agent utilisateur afin qu'il puisse le renvoyer dans l'avenir. Pour envoyer plusieurs cookies, on enverra plusieurs en-têtes Set-Cookie dans la même réponse.

Attention : Les navigateurs empêchent le code JavaScript front-end d'accéder à l'en-tête Set-Cookie, comme l'exige la spécification Fetch, qui définit Set-Cookie comme un nom d'en-tête de réponse interdit qui doit être filtré de toute réponse exposée au code front-end.

Pour plus d'information, voir le guide sur les cookies HTTP.

Type d'en-tête En-tête de réponse
Nom d'en-tête interdit Non
Nom d'en-tête de réponse interdit Oui

Syntaxe

Set-Cookie: <cookie-name>=<cookie-value>
Set-Cookie: <cookie-name>=<cookie-value>; Expires=<date>
Set-Cookie: <cookie-name>=<cookie-value>; Max-Age=<non-zero-digit>
Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value>
Set-Cookie: <cookie-name>=<cookie-value>; Path=<path-value>
Set-Cookie: <cookie-name>=<cookie-value>; Secure
Set-Cookie: <cookie-name>=<cookie-value>; HttpOnly

Set-Cookie: <cookie-name>=<cookie-value>; SameSite=Strict
Set-Cookie: <cookie-name>=<cookie-value>; SameSite=Lax
Set-Cookie: <cookie-name>=<cookie-value>; SameSite=None

// L'usage d'attributs multiples est également possible, par exemple :
Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value>; Secure; HttpOnly

Attributs

<cookie-name>=<cookie-value>

Un cookie commence par une paire nom-valeur:

Expires=<date> {{optional_inline}}

Le temps de vie maximal d'un cookie sous la forme d'une date HTTP. Voir Date pour le format requis.

Si non spécifié, le cookie devient un cookie de session. Une session finit quand le client s'arrête, les cookies de sessions sont alors supprimés à ce moment.

Attention : Plusieurs navigateurs ont un système de récupération de session qui enregistre les onglets et les restaure quand le navigateur redémarre. Les cookies de session seront aussi restaurés comme si le navigateur ne s'était jamais arrêté.

Quand une telle date de péremption est indiquée, elle est relative au client et pas au serveur.

Max-Age=<number> {{optional_inline}}
Le nombre de secondes avant son expiration. Une valeur nulle ou négative fera expirer immédiatement le cookie. Si Expires et Max-Age sont configurés, Max-Age sera prioritaire.
Domain=<domain-value> {{optional_inline}}

Le domaine où le cookie sera envoyé.

Path=<path-value> {{optional_inline}}
Un chemin qui doit exister dans l'URL de la requête ou le navigateur n'enverra pas d'en-tête Cookie correspondante par la suite. La barre oblique (/) est interprétée comme un séparateur de répertoire. Les sous-répertoires sont inclus, par exemple: pour Path=/docs les répertoires /docs, /docs/Web/ et /docs/Web/HTTP sont concernés.
Secure {{optional_inline}}

Un cookie sécurisé est envoyé uniquement si la requête est faite en https: (sauf pour localhost). Cependant des informations confidentielles ne devraient jamais être enregistrées dans un cookie classique, en effet le mécanique est non sécurisé et ne chiffre aucune information.

Note : Les sites non sécurisés (http:) ne peuvent plus définir des cookies Secure désormais (depuis Chrome 52+ et Firefox 52+). Depuis Firefox 75, cette restriction ne s'applique pas pour localhost.

HttpOnly {{optional_inline}}
Empêche JavaScript d'accéder au cookie; par exemple, au travers de la propriété Document.cookie, de l'API XMLHttpRequest ou de l'API Request. Cela protège des attaques cross-site scripting (XSS).
SameSite=<samesite-value> {{optional_inline}}

Contrôle si un cookie est envoyé avec les requêtes d'origine croisée, offrant ainsi une certaine protection contre les attaques de falsification de requêtes inter-sites (CSRF).

Note : Les normes relatives aux Cookies SameSite ont récemment changé de telle sorte que :

  1. Le comportement d'envoi des cookies si SameSite n'est pas spécifié est SameSite=Lax. Auparavant, le comportement par défaut était que les cookies étaient envoyés pour toutes les requêtes.
  2. Les cookies avec SameSite=None doivent désormais également spécifier l'attribut Secure (c'est-à-dire qu'ils nécessitent un contexte sécurisé).

Les options ci-dessous couvrent le nouveau comportement. Voir le tableau Compatibilité des navigateurs pour des informations sur la mise en œuvre spécifique des navigateurs (lignes : « SameSite : Defaults to Lax » et « SameSite : Secure context required »).

Les options sont :

Exemples

Les cookies de session sont supprimés quand le client s'éteint. Les cookies sont des cookies de session s'ils n'ont pas de directive Expires ou Max-Age.

Set-Cookie: sessionId=38afes7a8

Au lieu d'expirer lorsque le client est fermé, les cookies permanents expirent à une date spécifique (Expires) ou après une valeur de temps (Max-Age).

Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT
Set-Cookie: id=a3fWa; Max-Age=2592000

Domaines invalides

Un cookie pour un domaine qui n'inclut pas le serveur qui le définit doit être rejeté par l'agent utilisateur.

Le cookie suivant sera rejeté si le serveur est hébergé sur originalcompany.com:

Set-Cookie: qwerty=219ffwef9w0f; Domain=somecompany.co.uk

Un cookie pour un sous-domaine du domaine servi sera rejeté.

Le cookie suivant sera rejeté si le serveur est hébergé sur example.com:

Set-Cookie: sessionId=e8bb43229de9; Domain=foo.example.com

Les cookies préfixés par __Secure- ou __Host- peuvent être utilisés seulement s'ils sont définis avec l'attribut secure depuis une origine sécurisée (HTTPS).

De plus, les cookies avec le préfixe __Host- doivent avoir un path qui vaut / (donc tous les chemins de l'hôte) et ne doivent pas avoir d'attribut Domain.

Attention : Pour les clients qui n'implémentent pas les préfixes de cookies, vous ne pouvez pas compter sur ces contraintes, les cookies avec un préfixe seront toujours acceptés.

// Les deux sont acceptés s'ils viennent d'une origine sécurisée (HTTPS)
Set-Cookie: __Secure-ID=123; Secure; Domain=example.com
Set-Cookie: __Host-ID=123; Secure; Path=/

// Rejeté car l'attribut Secure est manquant
Set-Cookie: __Secure-id=1

// Rejeté car l'attribut Path=/ est manquant
Set-Cookie: __Host-id=1; Secure

// Rejeté à cause du domaine qui est spécifié
Set-Cookie: __Host-id=1; Secure; Path=/; domain=example.com

Spécifications

Spécification Titre
{{RFC("6265", "Set-Cookie", "4.1")}} HTTP State Management Mechanism
draft-ietf-httpbis-rfc6265bis-05 Cookie Prefixes, Same-Site Cookies, and Strict Secure Cookies

Compatibilité des navigateurs

{{Compat("http.headers.Set-Cookie", 5)}}

Note de compatibilité

Voir aussi