Glossaire

Un seul attribut absent tranche cookie de session vs cookie persistant

Taras Shynkarenko
Taras Shynkarenko
•Mis à jour : •9 min de lecture
Un seul attribut absent tranche cookie de session vs cookie persistantUn seul attribut absent tranche cookie de session vs cookie persistant

TL;DR, Réponse rapide

9 min de lecture

Un cookie persistant porte un attribut Expires ou Max-Age et reste jusqu'à l'échéance de ce délai. Un cookie de session ne porte ni l'un ni l'autre et, selon RFC 6265, vit jusqu'à ce que "the current session is over", au sens où le navigateur l'entend. La spécification ne définit jamais la session, et MDN avertit que les navigateurs dotés de la restauration de session peuvent garder les cookies de session "indefinitely". Les cookies persistants ont désormais un plafond : le brouillon rfc6265bis limite leur durée à 400 jours, ce que Chrome applique depuis la version 104 d'août 2022, et Safari plafonne à 7 jours les cookies persistants écrits par document.cookie. Pour le consentement dans l'UE, le groupe de travail Article 29 a jugé que les cookies de session first-party ont beaucoup plus de chances d'être exemptés que les cookies persistants third-party, tout en insistant sur le fait que c'est la finalité, et non la durée, qui tranche.

Toute la différence entre cookie de session vs cookie persistant tient à un attribut : un cookie persistant a une date Expires ou un Max-Age en secondes, et un cookie de session n'a ni l'un ni l'autre. RFC 6265, le standard actuel des cookies, indique qu'un cookie sans aucun de ces attributs est conservé jusqu'à ce que "the current session is over" (as defined by the user agent). Un cookie doté de l'un ou l'autre attribut est conservé jusqu'à l'échéance de ce délai, ou jusqu'à ce que le navigateur ou l'utilisateur le supprime avant.

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

La première ligne pose un cookie de session. La seconde pose un cookie persistant qui dure 2,592,000 secondes, soit 30 jours. Le nom du cookie ne joue aucun rôle. Un cookie appelé session_id avec un Max-Age est persistant, et un cookie appelé remember_me sans expiration est un cookie de session.

Cookie de sessionCookie persistant
Attribut qui en décideNi Expires ni Max-AgeExpires ou Max-Age présent
Drapeau interne de RFC 6265persistent-flag à falsepersistent-flag à true
Supprimé quand"the current session is over", au sens où le navigateur l'entendLe délai d'expiration est dépassé
Survit à un redémarrage du navigateurPas selon la spécification, mais la restauration de session peut le garderOui
Durée de vie maximaleIllimitée tant que la session est restaurée400 jours selon rfc6265bis et dans Chrome
ITP de Safari quand il est posé par document.cookiePas concerné, reste un cookie de sessionPlafonné à 7 jours
En navigation privéeSupprimé avec la session privéeTraité comme un cookie de session

Un navigateur décide en lisant les attributs dans l'ordre, comme le prévoit l'algorithme de stockage de la section 5.3 de RFC 6265. Si le cookie a un Max-Age, le navigateur met son persistent-flag à true et utilise Max-Age pour l'expiration. Sinon, s'il a un Expires, le drapeau passe à true et Expires fixe l'expiration. Sinon, le drapeau est à false, et l'expiration est fixée à "the latest representable date."

Dans la spécification, un cookie de session a donc la date d'expiration la plus lointaine possible, et seul son persistent-flag à false provoque sa suppression. La même section dit : "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."

Deux autres règles comptent en pratique :

  • Max-Age l'emporte sur Expires. Section 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."
  • Zéro supprime. Selon la section 5.2.2, un Max-Age de 0 ou moins fixe l'expiration à "the earliest representable date and time", donc le cookie est supprimé immédiatement. Envoyer Max-Age=0 est la façon standard de supprimer un cookie depuis le serveur.

Les deux pages de MDN sur les cookies ne s'accordent pas sur l'horloge qu'utilise une date Expires. Le guide des cookies HTTP dit que les dates Expires sont "relative to the client the cookie is being set on", si bien qu'un serveur à une autre heure peut provoquer des erreurs. La référence Set-Cookie dit que le serveur fixe Expires "with a value relative to its own internal clock", et que Firefox et les navigateurs basés sur Chromium corrigent l'écart d'horloge grâce à l'en-tête Date, alors que la spécification "does not indicate if/how the value should be corrected by the recipient." Le conseil du guide vaut dans les deux cas : Max-Age est "less error-prone", parce qu'il compte les secondes à partir du moment où le navigateur reçoit le cookie.

Quand une session se termine-t-elle vraiment ?

Aucun standard ne dit quand une session se termine, et c'est pour cela que les cookies de session ne se comportent pas comme leur nom le laisse penser. RFC 6265 laisse la question au navigateur avec la formule "as defined by the user agent", qui apparaît à la fois dans la section sur les attributs et dans celle sur le stockage.

Les deux pages de MDN sur les cookies décrivent le résultat par les deux bouts. La référence Set-Cookie dit qu'une session "finishes when the client shuts down, after which the session cookie is removed", puis ajoute un avertissement : les navigateurs dotés d'une fonction de restauration de session restaurent aussi les cookies de session, "as if the browser was never closed." Le guide des cookies HTTP va plus loin : "The browser defines when the 'current session' ends, and some browsers use session restoring when restarting. This can cause session cookies to last indefinitely."

Avec la restauration de session activée, un cookie de session peut survivre à un cookie persistant qui expire au bout d'une semaine. Un code qui considère un cookie de session comme une garantie de déconnexion dépend d'un réglage du navigateur qu'il ne peut pas voir, alors faites aussi expirer l'authentification côté serveur.

Un cookie de session n'a pas non plus de rapport avec une session en analytics. Google Analytics 4 stocke l'état de sa session dans un cookie nommé _ga_<container-id>, que son centre d'aide liste avec une expiration par défaut de 2 ans et la description "Used to persist session state." La session analytics est une fenêtre de temps que l'outil calcule, présentée dans ce qui compte comme une session. Le cookie qui s'en souvient est persistant.

Une personne referme son ordinateur portable sur un bureau, le moment où une session de navigateur se termine et où le sort de ses cookies de session se joue.

Un cookie persistant peut durer jusqu'à 400 jours dans Chrome et dans le brouillon qui remplacera RFC 6265. RFC 6265 ne fixait aucune limite haute. Son successeur, draft-ietf-httpbis-rfc6265bis-22 daté du 1er décembre 2025, que le datatracker de l'IETF montre dans la file d'attente du RFC Editor, ajoute la section 5.5 : le navigateur "MUST limit the maximum age of the cookie", et "The limit SHOULD NOT be greater than 400 days (34560000 seconds) in the future." Un Expires ou un Max-Age au-delà de la limite "MUST be reduced to the limit."

Chrome applique déjà ce plafond. Le blog Chrome for Developers indique : "As of Chrome release M104 (August 2022) cookies can no longer set an expiration date more than 400 days in the future." Les deux chiffres publiés entrent donc en conflit. Google Analytics documente des durées par défaut de 2 ans pour _ga et _ga_<container-id>, et Chrome, qui vient aussi de Google, ramène toute date de ce type à 400 jours au moment de stocker le cookie.

Safari fixe un plafond bien plus court pour un type de cookie. L'annonce d'Intelligent Tracking Prevention 2.1 par WebKit, le 21 février 2019, dit : "All persistent client-side cookies, i.e. persistent cookies created through document.cookie, are capped to a seven day expiry." Le même article ajoute : "Session cookies are not affected, they remain session cookies." Les cookies posés par l'en-tête Set-Cookie d'un serveur échappent à cette règle. L'ensemble des règles de Safari se trouve dans comment fonctionne la limite de 7 jours des cookies Safari.

RFC 6265 demande aussi aux serveurs de se retenir. La section 7.3 dit que les serveurs "SHOULD promote user privacy by selecting reasonable cookie expiration periods based on the purpose of the cookie", et donne un exemple qui brouille le vocabulaire : "a typical session identifier might reasonably be set to expire in two weeks." Autrement dit, un identifiant de session vit souvent dans un cookie persistant.

Flowsery
Flowsery

Commencez votre essai gratuit de 14 jours

Tableau de bord en temps réel

Suivi des objectifs

Suivi sans cookies

Un calendrier mural dont les jours sont barrés, pour illustrer les dates d'expiration fixes et la limite de 400 jours des cookies persistants.

Durée de vie maximale d'un cookie persistant
Safari, créé par document.cookie 7 jours
Plafond de Chrome et de rfc6265bis 400 jours
Valeur par défaut de _ga dans Google Analytics 2 ans
Chrome ramène à 400 jours la valeur de deux ans de Google Analytics, et Safari limite à 7 jours les cookies persistants créés par document.cookie.

Les cookies de session et les cookies persistants ont-ils besoin d'un consentement ?

En droit de l'UE, aucun des deux n'est exempté de consentement du fait de sa durée de vie, et les deux ne sont exemptés que s'ils sont strictement nécessaires à un service demandé par l'utilisateur. L'avis 04/2012 du groupe de travail Article 29 sur l'exemption de consentement pour les cookies, adopté le 7 juin 2012, définit les deux termes : un cookie de session "est effacé automatiquement lorsque l'utilisateur ferme son navigateur", et un cookie persistant "reste stocké dans son équipement terminal jusqu'à une date d'expiration prédéfinie (qui peut être exprimée en minutes, en jours ou en plusieurs années)."

L'avis traite ensuite la durée de vie comme un indice, pas comme un critère. Il dit que les cookies de session d'origine ont "beaucoup plus de chances que les cookies persistants 'de tiers' d'être exemptés de l'obligation de consentement", et dans le même paragraphe que "Le risque pour la protection des données est inhérent à la ou aux finalité(s) du traitement plutôt qu'aux informations contenues dans le cookie." Son exemple le plus clair est la connexion. Les cookies d'authentification qui durent le temps de la session sont exemptés, mais "Les cookies de connexion persistants qui stockent un jeton d'authentification d'une session de navigation à l'autre ne sont pas exemptés", et une case "se souvenir de moi (utilisation de cookies)" est citée comme un moyen approprié d'obtenir le consentement pour ces cookies.

Les autorités nationales ajoutent des chiffres. La CNIL, dans ses recommandations sur les outils de mesure d'audience, permet à ces traceurs d'échapper au consentement uniquement si leur durée de vie est limitée, "comme c'est le cas d'une durée de treize mois", si elle n'est pas "prorogée automatiquement lors des nouvelles visites", et si les données collectées sont conservées au maximum "vingt-cinq mois". Un cookie analytics qui remet son expiration à zéro à chaque visite ne remplit pas la deuxième condition, quelle que soit la brièveté de sa durée de vie.

Pour le tableau des cookies d'une politique de confidentialité, indiquez la durée de vie de chaque cookie telle qu'elle est réellement fixée, "session" ou une durée, à côté de sa finalité et de son caractère first-party ou third-party. Les mêmes questions s'appliquent aux données conservées dans le stockage du navigateur, que traite la page sur local storage vs cookies.

Questions fréquentes

Omettez à la fois les attributs Expires et Max-Age en le posant. Le navigateur garde alors le cookie jusqu'à la fin de la session, au sens où il l'entend. La page document.cookie de MDN donne la même règle pour les cookies posés par script : si aucun des deux n'est indiqué, le cookie expire à la fin de la session.

Les cookies de session sont-ils supprimés quand je ferme un onglet ?

Non. Fermer un onglet ne met pas fin à la session du navigateur. Les cookies de session sont supprimés à la fermeture du navigateur, sauf si la restauration de session les fait revenir.

Max-Age l'emporte. La section 4.1.2.2 de RFC 6265 dit que Max-Age "has precedence and controls the expiration date of the cookie." MDN ajoute que Max-Age est moins sujet aux erreurs, puisqu'une date Expires dépend d'horloges qui peuvent diverger.

Posez à nouveau le même cookie, avec le même nom, le même domaine et le même chemin, et un Max-Age de 0 ou une date Expires passée. RFC 6265 traite un Max-Age nul ou négatif comme la date représentable la plus ancienne, donc le navigateur supprime le cookie immédiatement.

Les cookies de session protègent-ils mieux la vie privée que les cookies persistants ?

Les cookies de session ont par conception une vie plus courte, ce qui limite la durée pendant laquelle ils peuvent relier des visites. Le groupe de travail Article 29 jugeait pourtant les cookies selon leur finalité : un cookie de session utilisé pour le suivi exige un consentement, et un cookie persistant peut être exempté quand l'utilisateur a demandé ce qu'il fait.

La navigation privée transforme-t-elle les cookies persistants en cookies de session ?

Dans les faits, oui. La section 7.2 de RFC 6265 dit qu'un navigateur qui propose d'empêcher le stockage persistant "MUST treat all received cookies as if the persistent-flag were set to false", et cite la navigation privée comme une forme courante de ce réglage. Tous les cookies disparaissent à la fermeture de la session privée.

Non. La session d'analyse est une fenêtre de temps que l'outil calcule, et le cookie qui la mémorise est persistant. Google Analytics 4 stocke l'état de la session dans _ga_<container-id>, que son centre d'aide indique avec une expiration par défaut de 2 ans.

Jusqu'à 400 jours. Depuis Chrome M104, en août 2022, un cookie ne peut plus fixer une date d'expiration à plus de 400 jours, donc un Expires ou Max-Age plus long est ramené à cette limite. Le brouillon rfc6265bis fixe le même plafond.

Les cookies de session survivent-ils au redémarrage du navigateur ?

Pas selon la spécification, mais souvent en pratique. RFC 6265 laisse le navigateur décider de la fin de la session, et les navigateurs dotés d'une restauration de session rétablissent les cookies de session comme si le navigateur n'avait jamais été fermé. MDN prévient qu'ils peuvent ainsi durer indéfiniment.

Oui. L'avis 04/2012 du groupe de travail Article 29 indique que les cookies de connexion persistants qui stockent un jeton d'authentification entre les sessions du navigateur ne sont pas exemptés, et cite une case "se souvenir de moi (utilisation de cookies)" comme moyen d'obtenir le consentement. Les cookies d'authentification qui ne durent que la session sont exemptés.

Flowsery
Flowsery

Commencez votre essai gratuit de 14 jours

Tableau de bord en temps réel

Suivi des objectifs

Suivi sans cookies

Cet article vous a-t-il été utile ?

Dites-nous ce que vous en pensez !

Nous voir plus souvent sur Google

Un clic définit Flowsery comme source préférée. Nos articles remontent alors dans vos À la une, en mode IA et dans les aperçus IA.

Avant de partir...

Flowsery

Flowsery

Des analyses orientées revenus pour votre site web

Suivez chaque visiteur, source et conversion en temps réel. Simple, puissant et sans cookies.

Tableau de bord en temps réel

Suivi des objectifs

Suivi sans cookies

Termes connexes du glossaire

Taille, expiration, accès et droit : local storage vs cookiesTaille, expiration, accès et droit : local storage vs cookies
Glossaire

Taille, expiration, accès et droit : local storage vs cookies

Comparatif local storage vs cookies d'après les spécifications : taille, expiration, envoi au serveur, HttpOnly, Secure, SameSite, ITP de Safari et ePrivacy.

•10 min de lecture
Comment fonctionne le test de l'intérêt légitime du RGPD selon l'article 6(1)(f)Comment fonctionne le test de l'intérêt légitime du RGPD selon l'article 6(1)(f)
Glossaire

Comment fonctionne le test de l'intérêt légitime du RGPD selon l'article 6(1)(f)

Les règles de l'intérêt légitime du RGPD à l'article 6(1)(f), citées depuis EUR-Lex, le test en trois étapes de l'EDPB et le cas disputé de l'analytics web.

•12 min de lecture
D'où vient la limite de taille des cookies de 4096 octetsD'où vient la limite de taille des cookies de 4096 octets
Glossaire

D'où vient la limite de taille des cookies de 4096 octets

La limite de taille des cookies vaut 4096 octets de nom plus valeur dans Chrome et Firefox, 1024 octets par attribut et 180 cookies par domaine.

•9 min de lecture
Ce que la conformité RGPD du session replay exige vraimentCe que la conformité RGPD du session replay exige vraiment
Glossaire

Ce que la conformité RGPD du session replay exige vraiment

Un audit de conformité RGPD du session replay tient à quatre points : base légale article 6, données sensibles article 9, consentement ePrivacy 5(3) et AIPD.

•10 min de lecture
Ce qui casse vraiment avec SameSite Lax vs Strict vs NoneCe qui casse vraiment avec SameSite Lax vs Strict vs None
Glossaire

Ce qui casse vraiment avec SameSite Lax vs Strict vs None

Le choix entre SameSite Lax vs Strict vs None tranché par le texte du RFC et le défaut documenté de Chrome, avec l'exigence Secure et ce que chaque mode casse.

•9 min de lecture
Ce que la limite de 7 jours des cookies Safari restreint vraimentCe que la limite de 7 jours des cookies Safari restreint vraiment
Glossaire

Ce que la limite de 7 jours des cookies Safari restreint vraiment

La limite de 7 jours des cookies Safari plafonne les cookies first-party posés par script, avec une limite plus courte de 24 heures après certains clics.

•8 min de lecture

Articles connexes