los Set-Cookie El encabezado de respuesta HTTP se usa para enviar una cookie desde el servidor al agente de usuario, por lo que el agente de usuario puede enviarla de vuelta al servidor más tarde. Para enviar múltiples cookies, múltiples Set-Cookie los encabezados deben enviarse en la misma respuesta.

Los navegadores impiden que el código JavaScript frontend acceda al Set Cookie encabezado, como lo requiere la especificación Fetch, que define Set-Cookie como un nombre de encabezado de respuesta prohibido ese debe ser filtrado de cualquier respuesta expuesta al código frontend.

Para obtener más información, consulte la guía sobre cookies HTTP.

Tipo de encabezado Encabezado de respuesta
Nombre de encabezado prohibido no
Nombre de encabezado de respuesta prohibido

Sintaxis

Set-Cookie: = 
Set-Cookie: =; Expires=
Set-Cookie: =; Max-Age=
Set-Cookie: =; Domain=
Set-Cookie: =; Path=
Set-Cookie: =; Secure
Set-Cookie: =; HttpOnly

Set-Cookie: =; SameSite=Strict
Set-Cookie: =; SameSite=Lax
Set-Cookie: =; SameSite=None

// Multiple attributes are also possible, for example:
Set-Cookie: =; Domain=; Secure; HttpOnly

Atributos

=
Una cookie comienza con un par nombre-valor:

  • A puede ser cualquier carácter US-ASCII, excepto caracteres de control, espacios o tabulaciones. Tampoco debe contener un carácter separador como el siguiente: ( ) < > @ , ; : " / [ ] ? = .
  • A opcionalmente, se puede envolver entre comillas dobles e incluir cualquier carácter US-ASCII excluyendo los caracteres de control, Espacio en blanco, comillas dobles, coma, punto y coma y barra invertida. Codificación: Muchas implementaciones realizan la codificación de URL en los valores de las cookies, sin embargo, no es necesario según la especificación RFC. Ayuda a satisfacer los requisitos sobre qué caracteres están permitidos para aunque.
  • __Secure-: Nombres de cookies que comienzan con __Secure- (el guión es parte del prefijo) debe establecerse con el secure bandera desde una página segura (HTTPS).
  • __Host-: Cookies con nombres que comienzan con __Host- debe configurarse con el secure bandera, debe ser de una página segura (HTTPS), no debe tener un dominio especificado (y por lo tanto no se envían a subdominios) y la ruta debe ser /.
Expires=Opcional

La vida útil máxima de la cookie como una marca de tiempo de fecha HTTP. Ver Date para el formato requerido.

Si no se especifica, la cookie se convierte en un cookie de sesión. Una sesión finaliza cuando el cliente se apaga y las cookies de sesión se eliminarán.

Advertencia: Muchos navegadores web tienen restaurar sesión función que guardará todas las pestañas y las restaurará la próxima vez que se utilice el navegador. Las cookies de sesión también se restaurarán, como si el navegador nunca se cerrara.

Cuando se establece una fecha de Caducidad, la fecha límite es relativa a la cliente se está configurando la cookie, no el servidor.

Max-Age= Opcional
Número de segundos hasta que caduca la cookie. Un número cero o negativo caducará la cookie inmediatamente. Si ambos Expires y Max-Age se establecen, Max-Age tiene precedencia.
Domain=Opcional
Host al que se enviará la cookie.

  • Si se omite, el valor predeterminado es el host de la URL del documento actual, sin incluir los subdominios.
  • Contrariamente a las especificaciones anteriores, los puntos iniciales en los nombres de dominio (.example.com) se ignoran.
  • Múltiples valores de dominio / host son no permitido, pero si un dominio es especificado, los subdominios siempre se incluyen.
Path=Opcional
Una ruta que debe existir en la URL solicitada, o el navegador no enviará la Cookie encabezamiento.
La barra inclinada (/) se interpreta como un separador de directorio, y los subdirectorios también coincidirán: para Path=/docs, /docs, /docs/Web/, y /docs/Web/HTTP todo coincidirá.
SecureOpcional
La cookie solo se envía al servidor cuando se realiza una solicitud con el https: esquema (excepto en localhost), y por lo tanto es más resistente a hombre en el medio ataques.

Nota: No asumas que Secure evita todo acceso a información sensible en las cookies (claves de sesión, detalles de inicio de sesión, etc.). Las cookies con este atributo aún se pueden leer / modificar con acceso al disco duro del cliente, o desde JavaScript si el HttpOnly el atributo de cookie no está establecido.

Nota: Sitios inseguros (http:) no puede configurar cookies con el Secure atributo (desde Chrome 52 y Firefox 52). Para Firefox, el https: los requisitos se ignoran cuando el Secure El atributo lo establece localhost (desde Firefox 75).

HttpOnlyOpcional
Prohíbe que JavaScript acceda a la cookie, por ejemplo, a través del Document.cookie propiedad. Tenga en cuenta que una cookie que se ha creado con HttpOnly aún se enviará con solicitudes iniciadas por JavaScript, por ejemplo, al llamar XMLHttpRequest.send() o fetch(). Esto mitiga los ataques contra las secuencias de comandos entre sitios (XSS).
SameSite=Opcional
  • Strict: El navegador envía la cookie solo para solicitudes del mismo sitio (es decir, solicitudes que se originan en el mismo sitio que instaló la cookie). Si la solicitud se originó en una URL diferente a la actual, no hay cookies con la SameSite=Strict se envían atributos.
  • Lax: La cookie se retiene en las subconsultas entre sitios, como las llamadas para cargar imágenes o marcos, pero se envía cuando un usuario navega a la URL desde un sitio externo, por ejemplo, siguiendo un enlace.
  • None: El navegador envía la cookie con solicitudes entre sitios y del mismo sitio.

Afirma que una cookie no debe enviarse con solicitudes de origen cruzado, lo que proporciona cierta protección contra ataques de falsificación de solicitudes entre sitios (CSRF).

Los navegadores están migrando para tener cookies por defecto a SameSite=Lax. Si es necesario enviar una cookie de origen cruzado, opte por no recibir SameSite restricción usando el None valor. los None el valor requiere el Secure atributo.

Ejemplos de

Cookie de sesión

Cookies de sesión se eliminan cuando el cliente se apaga. Las cookies son cookies de sesión si no especifican el Expires o Max-Age atributos.

Set-Cookie: sessionId=38afes7a8

Cookie permanente

En lugar de caducar cuando el cliente está cerrado, cookies permanentes expiran en una fecha específica (Expires) o después de un período de tiempo específico (Max-Age).

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

Dominios inválidos

Una cookie para un dominio que no incluye el servidor que lo configuró. debe ser rechazado por el agente de usuario.

La siguiente cookie será rechazada si la configura un servidor alojado en originalcompany.com:

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

Se rechazará una cookie para un subdominio del dominio de servicio.

La siguiente cookie será rechazada si la configura un servidor alojado en example.com:

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

Prefijos de cookies

Nombres de cookies con el prefijo __Secure- o __Host- sólo se pueden utilizar si se configuran con el secure atributo de un origen seguro (HTTPS).

Además, las cookies con la __Host- el prefijo debe tener una ruta de / (es decir, cualquier ruta en el host) y no debe tener un Domain atributo.

Para los clientes que no implementan prefijos de cookies, no puede contar con estas garantías adicionales, y las cookies con prefijos siempre serán aceptadas.

// Both accepted when from a secure origin (HTTPS)
Set-Cookie: __Secure-ID=123; Secure; Domain=example.com
Set-Cookie: __Host-ID=123; Secure; Path=/

// Rejected due to missing Secure attribute
Set-Cookie: __Secure-id=1

// Rejected due to the missing Path=/ attribute
Set-Cookie: __Host-id=1; Secure

// Rejected due to setting a Domain
Set-Cookie: __Host-id=1; Secure; Path=/; Domain=example.com

Especificaciones

Especificación Título
RFC 6265, sección 4.1: Establecer cookies Mecanismo de gestión de estado HTTP
borrador-ietf-httpbis-rfc6265bis-05 Prefijos de cookies, cookies del mismo sitio y cookies estrictamente seguras

Compatibilidad del navegadorActualizar datos de compatibilidad en GitHub

Escritorio
Cromo Borde Firefox explorador de Internet Ópera Safari
Set-Cookie 12
HttpOnly 1 12 3 9 11 5
Max-Age 12 8
SameSite 51 dieciséis 60 No 39 13

13
Safari 13 en macOS 10.14 (Mojave), trata SameSite=None y valores inválidos como Strict. Esto se corrigió en la versión 10.15 (Catalina) y posteriores.
12
Golosinas SameSite=None y valores inválidos como Strict en macOS antes de 10.15 Catalina. Ver error 198181.
SameSite: SameSite=Lax 51 dieciséis 60 No 39 12
SameSite: Predeterminado en Lax 80 80 69Discapacitado

69Discapacitado
Deshabilitado a partir de la versión 69: esta función está detrás del network.cookie.sameSite.laxByDefault preferencia (debe establecerse en true). Para cambiar las preferencias en Firefox, visite about: config.
No 67 No
SameSite: SameSite=None 51 dieciséis 60 No 39 13

13
No es compatible antes de macOS antes de la versión 10.15 (Catalina).
SameSite: SameSite=Strict 51 dieciséis 60 No 39 12
SameSite: Se requiere un contexto seguro 80 80 69 Discapacitado

69Discapacitado
Deshabilitado a partir de la versión 69: esta función está detrás del network.cookie.sameSite.noneRequiresSecure preferencia (debe establecerse en true). Para cambiar las preferencias en Firefox, visite about: config.
No 67 No
Prefijos de cookies 49 79 50 No 36
Móvil
Vista web de Android Chrome para Android Firefox para Android Opera para Android Safari en iOS Internet de Samsung
Set-Cookie
HttpOnly 37 4 4
Max-Age
SameSite 51 51 60 41 13

13
12,2
Golosinas SameSite=None y valores inválidos como Strict en iOS antes de 13. Consulte error 198181.
5,0
SameSite: SameSite=Lax 51 51 60 41 12,2 5,0
SameSite: Predeterminado en Lax 80 80 No No No No
SameSite: SameSite=None 51 51 60 41 13 5,0
SameSite: SameSite=Strict 51 51 60 41 12,2 5,0
SameSite: Se requiere un contexto seguro 80 80 No No No No
Prefijos de cookies 49 49 50 36 5,0

Notas de compatibilidad

  • A partir de Chrome 52 y Firefox 52, los sitios inseguros (http:) no puede configurar cookies con el Secure atributo más.

Ver también

© 2005–2020 Mozilla y colaboradores individuales.
Con licencia de Creative Commons Attribution-ShareAlike License v2.5 o posterior.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie