Glosario

Cómo un solo atributo ausente decide cookie de sesión vs cookie persistente

Taras Shynkarenko
Taras Shynkarenko
•Actualizado: •9 min de lectura
Cómo un solo atributo ausente decide cookie de sesión vs cookie persistenteCómo un solo atributo ausente decide cookie de sesión vs cookie persistente

TL;DR, Respuesta rápida

9 min de lectura

Una cookie persistente lleva un atributo Expires o Max-Age y se conserva hasta que se agota ese tiempo. Una cookie de sesión no lleva ninguno de los dos y, según RFC 6265, vive hasta "the current session is over", tal como lo defina el navegador. La especificación nunca define la sesión, y MDN advierte de que los navegadores con restauración de sesión pueden conservar las cookies de sesión "indefinitely". Las cookies persistentes tienen ahora un techo: el borrador rfc6265bis limita la vida útil a 400 días, algo que Chrome aplica desde la versión 104 en agosto de 2022, y Safari limita a 7 días las cookies persistentes escritas con document.cookie. Sobre el consentimiento en la UE, el Grupo de Trabajo del Artículo 29 dijo que es mucho más probable que las cookies de sesión propias queden exentas que las persistentes de terceros, aunque insistió en que decide la finalidad, no la duración.

Toda la diferencia en cookie de sesión vs cookie persistente es un atributo: una cookie persistente tiene una fecha Expires o un Max-Age en segundos, y una cookie de sesión no tiene ninguno. RFC 6265, el estándar actual de cookies, dice que una cookie sin ninguno de los dos atributos se conserva hasta "the current session is over" (as defined by the user agent). Una cookie con cualquiera de los dos se conserva hasta que pasa ese momento, o hasta que el navegador o el usuario la borran antes.

Set-Cookie: sid=31d4d96e407aad42; Path=/; Secure; HttpOnly
Set-Cookie: lang=en-US; Max-Age=2592000; Path=/

La primera línea crea una cookie de sesión. La segunda crea una cookie persistente que dura 2,592,000 segundos, es decir, 30 días. El nombre de la cookie no influye. Una cookie llamada session_id con un Max-Age es persistente, y una cookie llamada remember_me sin caducidad es una cookie de sesión.

Cookie de sesiónCookie persistente
Atributo que lo decideSin Expires y sin Max-AgeExpires o Max-Age presente
Flag interno de RFC 6265persistent-flag falsepersistent-flag true
Se borra cuando"the current session is over", tal como lo defina el navegadorPasa la hora de caducidad
Sobrevive a un reinicio del navegadorSegún la especificación no, pero la restauración de sesión puede conservarlaSí
Vida útil máximaSin límite mientras se restaure la sesión400 días según rfc6265bis y en Chrome
Safari ITP si se crea con document.cookieNo le afecta, sigue siendo cookie de sesiónLimitada a 7 días
En navegación privadaSe borra con la sesión privadaSe trata como cookie de sesión

Un navegador lo decide leyendo los atributos en orden, tal como establece el algoritmo de almacenamiento de la sección 5.3 de RFC 6265. Si la cookie tiene un Max-Age, el navegador pone su persistent-flag a true y usa Max-Age para la caducidad. Si no, y tiene un Expires, el flag es true y Expires fija la caducidad. Si no tiene ninguno, el flag es false y la caducidad se fija en "the latest representable date."

Así que, dentro de la especificación, una cookie de sesión tiene la fecha de caducidad más lejana posible, y solo el persistent-flag en false hace que se elimine. La misma sección dice: "When 'the current session is over' (as defined by the user agent), the user agent MUST remove from the cookie store all cookies with the persistent-flag set to false."

Hay dos reglas más que importan en la práctica:

  • Max-Age gana a Expires. Sección 4.1.2.2: "If a cookie has both the Max-Age and the Expires attribute, the Max-Age attribute has precedence and controls the expiration date of the cookie."
  • Cero borra. Según la sección 5.2.2, un Max-Age de 0 o menos fija la caducidad en "the earliest representable date and time", así que la cookie se elimina en el acto. Enviar Max-Age=0 es la forma estándar de borrar una cookie desde el servidor.

Las dos páginas de MDN sobre cookies no coinciden en qué reloj usa una fecha Expires. La guía de cookies HTTP dice que las fechas Expires son "relative to the client the cookie is being set on", así que un servidor con otra hora puede provocar errores. La referencia de Set-Cookie dice que el servidor fija Expires "with a value relative to its own internal clock", y que Firefox y los navegadores basados en Chromium corrigen la diferencia de reloj con el header Date, mientras que la especificación "does not indicate if/how the value should be corrected by the recipient." El consejo de la guía vale en cualquier caso: Max-Age es "less error-prone", porque cuenta segundos desde el momento en que el navegador recibe la cookie.

¿Cuándo termina realmente una sesión?

Ningún estándar dice cuándo termina una sesión, y ese hueco es la razón por la que las cookies de sesión no se comportan como sugiere su nombre. RFC 6265 lo deja en manos del navegador con la frase "as defined by the user agent", que aparece tanto en la sección de atributos como en la de almacenamiento.

Las dos páginas de MDN sobre cookies describen el resultado desde extremos opuestos. La referencia de Set-Cookie dice que una sesión "finishes when the client shuts down, after which the session cookie is removed", y luego añade la advertencia de que los navegadores con restauración de sesión también restauran las cookies de sesión, "as if the browser was never closed." La guía de cookies HTTP va más allá: "The browser defines when the 'current session' ends, and some browsers use session restoring when restarting. This can cause session cookies to last indefinitely."

Con la restauración de sesión activada, una cookie de sesión puede durar más que una cookie persistente con una semana de caducidad. El código que trata una cookie de sesión como garantía de cierre de sesión depende de un ajuste del navegador que no puede ver, así que haz caducar también la autenticación en el servidor.

Una cookie de sesión tampoco tiene nada que ver con una sesión en analítica. Google Analytics 4 guarda el estado de la sesión en una cookie llamada _ga_<container-id>, que su centro de ayuda lista con una caducidad por defecto de 2 años y la descripción "Used to persist session state." La sesión de analítica es una ventana de tiempo que calcula la herramienta, explicada en qué cuenta como una sesión. La cookie que la recuerda es persistente.

Una persona cierra el portátil en un escritorio, el momento en que termina una sesión del navegador y se decide qué pasa con sus cookies de sesión.

Una cookie persistente puede durar hasta 400 días en Chrome y en el borrador que sustituirá a RFC 6265. RFC 6265 no fijaba ningún límite superior. Su sucesor, draft-ietf-httpbis-rfc6265bis-22 con fecha del 1 de diciembre de 2025, que el datatracker del IETF muestra en la cola del RFC Editor, añade la sección 5.5: el navegador "MUST limit the maximum age of the cookie", y "The limit SHOULD NOT be greater than 400 days (34560000 seconds) in the future." Un Expires o Max-Age que supere el límite "MUST be reduced to the limit."

Chrome ya aplica el tope. El blog Chrome for Developers afirma: "As of Chrome release M104 (August 2022) cookies can no longer set an expiration date more than 400 days in the future." Eso deja en conflicto las dos cifras publicadas. Google Analytics documenta caducidades por defecto de 2 años para _ga y _ga_<container-id>, y Chrome, también de Google, recorta cualquier fecha así a 400 días al guardar la cookie.

Safari fija un techo mucho más bajo para un tipo de cookie. El anuncio de Intelligent Tracking Prevention 2.1 de WebKit, del 21 de febrero de 2019, dice: "All persistent client-side cookies, i.e. persistent cookies created through document.cookie, are capped to a seven day expiry." El mismo post añade: "Session cookies are not affected, they remain session cookies." Las cookies que crea el header Set-Cookie de un servidor quedan fuera de esa regla. El conjunto completo de reglas de Safari está en cómo funciona el límite de 7 días de Safari para cookies.

RFC 6265 también pide contención a los servidores. La sección 7.3 dice que los servidores "SHOULD promote user privacy by selecting reasonable cookie expiration periods based on the purpose of the cookie", y da un ejemplo que enreda el vocabulario: "a typical session identifier might reasonably be set to expire in two weeks." Es decir, un identificador de sesión suele vivir en una cookie persistente.

Flowsery
Flowsery

Empieza tu prueba gratis de 14 días

Panel en tiempo real

Seguimiento de objetivos

Rastreo sin cookies

Un calendario de pared con días tachados, que representa las fechas de caducidad fijas y el límite de 400 días de las cookies persistentes.

Vida máxima de una cookie persistente
Safari, creada con document.cookie 7 días
Límite de Chrome y rfc6265bis 400 días
Valor por defecto de _ga en Google Analytics 2 años
Chrome recorta a 400 días el valor de dos años de Google Analytics, y Safari limita a 7 días las cookies persistentes creadas con document.cookie.

¿Necesitan consentimiento las cookies de sesión y las cookies persistentes?

Según el derecho de la UE, ninguno de los dos tipos queda exento de consentimiento por su duración, y ambos están exentos solo cuando son estrictamente necesarios para un servicio que el usuario pidió. El Dictamen 04/2012 sobre la exención del requisito de consentimiento de cookies del Grupo de Trabajo del Artículo 29, adoptado el 7 de junio de 2012, define los dos términos: un "cookie de sesión" es un cookie que "se elimina automáticamente cuando el usuario cierra el navegador", y un "cookie persistente" es un cookie que "permanece almacenado en el terminal del usuario hasta una fecha de expiración determinada (pueden ser minutos, días o años en el futuro)."

Después, el dictamen trata la duración como una señal, no como una prueba. Dice que "es mucho más probable que los 'cookies de origen para una sesión' estén exentos del requisito de consentimiento que los 'cookies de terceros' persistentes", y en el mismo párrafo: "Desde el punto de vista de la protección de datos, el riesgo reside en la finalidad o finalidades del tratamiento más que en la información contenida en el cookie." Su ejemplo más claro es el inicio de sesión. Las cookies de autenticación que duran la sesión están exentas, pero "Los cookies persistentes que almacenan un token de autenticación durante las sesiones de navegación no están exentos del requisito de consentimiento con arreglo al CRITERIO B", y una casilla "recuerde (utiliza cookies)" aparece como forma adecuada de obtener el consentimiento para ellas.

Los reguladores nacionales añaden cifras. La CNIL francesa, en su guía sobre herramientas de medición de audiencia, permite que esos trackers se salten el consentimiento solo si su vida útil se limita a un periodo "comme c'est le cas d'une durée de treize mois" (13 meses, por ejemplo), no queda "prorogée automatiquement lors des nouvelles visites" (prorrogada automáticamente en nuevas visitas), y los datos recogidos se conservan como máximo "vingt-cinq mois" (25 meses). Una cookie de analítica que reinicia su caducidad en cada visita incumple la segunda condición, por corta que sea su vida útil.

Para la tabla de cookies de una política de privacidad, indica la duración de cada cookie tal como se crea de verdad, "sesión" o un plazo, junto a su finalidad y a si es propia o de terceros. Las mismas preguntas se aplican a los datos guardados en el almacenamiento del navegador, que trata la página sobre local storage vs cookies.

Preguntas frecuentes

Omite los atributos Expires y Max-Age al crearla. El navegador conserva entonces la cookie hasta que termina la sesión, tal como la defina el navegador. La página de MDN sobre document.cookie da la misma regla para las cookies creadas por script: si no se especifica ninguno, la cookie caduca al final de la sesión.

¿Se borran las cookies de sesión al cerrar una pestaña?

No. Cerrar una pestaña no termina la sesión del navegador. Las cookies de sesión se eliminan cuando se cierra el navegador, salvo que la restauración de sesión las recupere.

Gana Max-Age. La sección 4.1.2.2 de RFC 6265 dice que Max-Age "has precedence and controls the expiration date of the cookie." MDN añade que Max-Age es menos propenso a errores, porque una fecha Expires depende de relojes que pueden no coincidir.

Vuelve a crear la misma cookie, con el mismo nombre, dominio y ruta, y un Max-Age de 0 o una fecha Expires en el pasado. RFC 6265 trata un Max-Age de cero o menos como la fecha representable más temprana, así que el navegador elimina la cookie de inmediato.

¿Son las cookies de sesión más privadas que las cookies persistentes?

Las cookies de sesión duran menos por diseño, lo que limita cuánto tiempo pueden enlazar visitas. Aun así, el Grupo de Trabajo del Artículo 29 juzgó las cookies por su finalidad: una cookie de sesión usada para rastrear necesita consentimiento, y una cookie persistente puede estar exenta cuando el usuario pidió lo que hace.

¿Convierte la navegación privada las cookies persistentes en cookies de sesión?

En la práctica, sí. La sección 7.2 de RFC 6265 dice que un navegador que ofrece impedir el almacenamiento persistente "MUST treat all received cookies as if the persistent-flag were set to false", y menciona la navegación privada como una forma habitual de ese ajuste. Todas las cookies desaparecen cuando se cierra la sesión privada.

No. La sesión de analítica es una ventana de tiempo que calcula la herramienta, y la cookie que la recuerda es persistente. Google Analytics 4 guarda el estado de la sesión en _ga_<container-id>, que su centro de ayuda indica con una caducidad por defecto de 2 años.

Hasta 400 días. Desde Chrome M104, en agosto de 2022, una cookie ya no puede fijar una caducidad a más de 400 días vista, así que un Expires o Max-Age mayor se recorta a ese límite. El borrador rfc6265bis fija el mismo tope.

¿Sobreviven las cookies de sesión al reinicio del navegador?

Según la especificación no, pero en la práctica a menudo sí. RFC 6265 deja al navegador decidir cuándo termina la sesión, y los navegadores con restauración de sesión recuperan las cookies de sesión como si nunca se hubiera cerrado. MDN advierte de que así pueden durar indefinidamente.

Sí. El Dictamen 04/2012 del Grupo de Trabajo del Artículo 29 dice que las cookies persistentes de inicio de sesión que guardan un token de autenticación entre sesiones del navegador no están exentas, y cita una casilla "recuerde (utiliza cookies)" como forma de obtener el consentimiento. Las cookies de autenticación que duran solo la sesión sí están exentas.

Flowsery
Flowsery

Empieza tu prueba gratis de 14 días

Panel en tiempo real

Seguimiento de objetivos

Rastreo sin cookies

¿Te resultó útil este artículo?

¡Cuéntanos qué opinas!

Vernos más en Google

Un clic marca Flowsery como fuente preferida y nuestros artículos aparecen más arriba en tus Noticias destacadas, el modo IA y los resúmenes con IA.

Antes de irte...

Flowsery

Flowsery

Analítica orientada a ingresos para tu sitio web

Rastrea cada visitante, fuente y conversión en tiempo real. Simple, potente y sin cookies.

Panel en tiempo real

Seguimiento de objetivos

Rastreo sin cookies

Términos relacionados del glosario

Tamaño, caducidad, acceso y ley en almacenamiento local vs cookiesTamaño, caducidad, acceso y ley en almacenamiento local vs cookies
Glosario

Tamaño, caducidad, acceso y ley en almacenamiento local vs cookies

Comparamos almacenamiento local vs cookies según las especificaciones: tamaño, caducidad, envío al servidor, HttpOnly, Secure, SameSite, Safari ITP y ePrivacy.

•10 min de lectura
Cómo funciona el test del interés legítimo en el RGPD según el artículo 6(1)(f)Cómo funciona el test del interés legítimo en el RGPD según el artículo 6(1)(f)
Glosario

Cómo funciona el test del interés legítimo en el RGPD según el artículo 6(1)(f)

Las reglas del interés legítimo en el RGPD del artículo 6(1)(f), citadas de EUR-Lex, con el triple test del EDPB y por qué la analítica web sigue en duda.

•12 min de lectura
De dónde vienen los 4096 bytes del límite de tamaño de cookieDe dónde vienen los 4096 bytes del límite de tamaño de cookie
Glosario

De dónde vienen los 4096 bytes del límite de tamaño de cookie

El límite de tamaño de cookie es de 4096 bytes de nombre más valor en Chrome y Firefox, 1024 bytes por atributo y 180 cookies por dominio.

•9 min de lectura
Qué exige de verdad el RGPD en session replayQué exige de verdad el RGPD en session replay
Glosario

Qué exige de verdad el RGPD en session replay

Revisar el RGPD en session replay depende de cuatro cosas: base legal del artículo 6, datos del artículo 9, consentimiento ePrivacy 5(3) y una EIPD.

•10 min de lectura
Qué se rompe de verdad con SameSite Lax vs Strict vs NoneQué se rompe de verdad con SameSite Lax vs Strict vs None
Glosario

Qué se rompe de verdad con SameSite Lax vs Strict vs None

Cómo decidir SameSite Lax vs Strict vs None con el texto del RFC y el valor por defecto que Chrome documenta, el requisito Secure y qué mata cada modo.

•10 min de lectura
Qué restringe en realidad el límite de 7 días de cookies de SafariQué restringe en realidad el límite de 7 días de cookies de Safari
Glosario

Qué restringe en realidad el límite de 7 días de cookies de Safari

El límite de 7 días de cookies de Safari recorta las cookies first-party puestas por JavaScript, con un límite más corto de 24 horas tras ciertos clics.

•9 min de lectura

Artículos relacionados