logo
GeekFormat

Analyseur Set-Cookie

Analyseur Set-Cookie

Collez des en-têtes de réponse Set-Cookie multilignes pour inspecter les attributs et signaler les combinaisons SameSite / Secure risquées.

Cartes d'attributs de cookie

2 Set-Cookie
#1sessionabc123
path/
httponly(drapeau)
secure(drapeau)
samesiteLax
Aucun problème d'attribut évident trouvé
#2preview1
max-age600 (10m 0s)

setCookieParser.attr.maxAgeHint

samesiteNone
secure(drapeau)
setCookieParser.warn.missingHttpOnlysetCookieParser.warn.missingPath

Aperçu JSON

[
  {
    "index": 0,
    "raw": "session=abc123; Path=/; HttpOnly; Secure; SameSite=Lax",
    "name": "session",
    "value": "abc123",
    "decodedValue": "abc123",
    "attributes": [
      {
        "key": "path",
        "value": "/"
      },
      {
        "key": "httponly",
        "value": null
      },
      {
        "key": "secure",
        "value": null
      },
      {
        "key": "samesite",
        "value": "Lax"
      }
    ],
    "attributeMap": {
      "path": "/",
      "httponly": true,
      "secure": true,
      "samesite": "Lax"
    },
    "warnings": []
  },
  {
    "index": 1,
    "raw": "preview=1; Max-Age=600; SameSite=None; Secure",
    "name": "preview",
    "value": "1",
    "decodedValue": "1",
    "attributes": [
      {
        "key": "max-age",
        "value": "600"
      },
      {
        "key": "samesite",
        "value": "None"
      },
      {
        "key": "secure",
        "value": null
      }
    ],
    "attributeMap": {
      "max-age": "600",
      "samesite": "None",
      "secure": true
    },
    "warnings": [
      "warn.missingHttpOnly",
      "warn.missingPath"
    ]
  }
]

Collez vos en-têtes Set-Cookie et voyez instantanément pourquoi le navigateur n'accepte pas vos cookies.

Recommandations connexes

Cas d'utilisation

  • Lorsque les navigateurs refusent d'écrire des cookies, identifiez rapidement s'il s'agit d'un problème de politique SameSite, d'un indicateur Secure manquant ou d'une incompatibilité Path/Domain
  • Déboguez les cookies bloqués par les navigateurs dans les scénarios de connexion tierce/SSO/iframe intégré — vérifiez que SameSite=None est correctement associé à Secure
  • Lors des audits de sécurité, vérifiez par lots que tous les cookies renvoyés par les API définissent HttpOnly pour empêcher le vol XSS, et Secure pour empêcher la transmission en clair HTTP
  • Lors de l'utilisation de cookies préfixés __Host-/__Secure-, vérifiez que les exigences obligatoires RFC 6265bis sont satisfaites pour éviter le rejet silencieux par les navigateurs
  • Lors du débogage du partitionnement de cookies tiers CHIPS (Partitioned Cookie), confirmez que Partitioned et Secure sont déclarés ensemble
  • Lors de la configuration de Max-Age/Expires côté serveur, confirmez des valeurs valides pour éviter l'expiration immédiate des cookies due à un décalage d'horloge ou à Max-Age=0
  • Comparez les différences d'en-tête Set-Cookie entre les environnements (développement/staging/production) pour déboguer le cas mystérieux où les cookies fonctionnent localement mais disparaissent en production
  • Copiez des en-têtes de réponse entiers directement depuis DevTools ou les réponses curl — pas besoin de supprimer manuellement le préfixe Set-Cookie:, l'outil le retire automatiquement
  • Lors de la rédaction de documentation API ou du débogage de bogues de requêtes WASM/WebWorker, collez les résultats JSON analysés directement dans les documents pour illustrer la structure des cookies

Fonctionnalités

  • Analyse multi-cookies indépendante : Chaque ligne Set-Cookie devient sa propre carte numérotée affichant le nom, la valeur et la valeur décodée URL — repérez les cookies problématiques en un coup d'œil
  • Détection d'attributs de sécurité en 14 points : Identifie automatiquement SameSite=None sans Secure, valeurs SameSite invalides, Partitioned sans Secure, HttpOnly manquant, Path manquant, SameSite manquant, violations du préfixe __Host-, __Secure- sans Secure, Max-Age invalide/nul, point en tête dans Domain, Expires sans Max-Age, et autres erreurs courantes
  • Ventilation complète des attributs : SameSite, Secure, HttpOnly, Path, Domain, Expires, Max-Age, Partitioned listés point par point — les attributs drapeau et les attributs avec valeur sont clairement distingués
  • Conversion Max-Age automatique : Les secondes sont automatiquement converties en temps lisible en jours/heures/minutes/secondes, par ex. Max-Age=2592000 s'affiche comme 30d
  • Affichage automatique des valeurs décodées URL : Lorsque les valeurs de cookie contiennent un encodage %XX, le texte original décodé est automatiquement affiché (par ex. sessionID%3Dabc → sessionID=abc) avec un indicateur à flèche verte
  • Validation de préfixe RFC 6265bis : Vérifie strictement les exigences de conformité pour les cookies préfixés __Host- et __Secure-, y compris Path=/, pas de Domain et Secure obligatoire
  • Copie d'en-tête brute en un clic : Regroupez toutes les lignes brutes de cookies analysés pour les copier facilement dans des e-mails, des tickets ou des documents à partager avec votre équipe
  • Aperçu JSON structuré : Les résultats d'analyse prennent en charge la sortie JSON incluant les champs complets : name/value/decodedValue/attributes/attributeMap/warnings — directement utilisables dans les scripts et cas de test
  • Traitement entièrement local : Le contenu Set-Cookie est analysé entièrement dans votre navigateur, jamais téléchargé sur aucun serveur, préservant la confidentialité des sessions sensibles, tokens et autres données
  • Badges d'avertissement intelligents : Chaque problème est signalé par un badge d'avertissement orange indiquant la raison exacte — pas besoin de consulter les documents RFC ligne par ligne
  • Saisie multi-lignes en masse : Collez des en-têtes de réponse entiers en une fois (par ex. copiés depuis le panneau Network de Chrome DevTools) — le préfixe Set-Cookie: est automatiquement retiré pour une analyse ligne par ligne
  • Prend en charge les valeurs entre guillemets et avec points-virgules : Traite correctement les valeurs de cookie entre guillemets doubles et les points-virgules dans les dates Expires selon la spécification RFC, sans division incorrecte

Comment utiliser

  1. Ouvrez le panneau Network des DevTools de votre navigateur, trouvez la requête cible et copiez le contenu de Set-Cookie depuis la section Response Headers (prend en charge plusieurs lignes — copiez tous les cookies en une fois)
  2. Collez les en-têtes de réponse Set-Cookie copiés dans la zone de saisie, un cookie par ligne (pas besoin de supprimer manuellement le préfixe Set-Cookie: ; l'outil le retire automatiquement)
  3. L'outil analyse en temps réel : le haut affiche le nombre d'en-têtes Set-Cookie détectés, et chaque cookie apparaît ci-dessous comme sa propre carte d'attributs
  4. L'en-tête de la carte affiche le numéro, le nom du cookie et la valeur brute ; si la valeur contient un encodage URL, la valeur décodée apparaît après une flèche verte
  5. Le corps de la carte affiche les attributs point par point : SameSite, Secure, HttpOnly, Path, Domain, Max-Age, Expires, Partitioned, etc. Max-Age ajoute automatiquement une mention entre parenthèses avec la conversion en temps lisible
  6. Le pied de carte affiche les résultats de l'inspection : des badges d'avertissement orange signalent des problèmes spécifiques (chaque problème a une explication claire), les badges verts signifient qu'aucun problème évident n'a été détecté
  7. Lorsque vous devez comparer avec la configuration serveur, cliquez sur « Copier les en-têtes bruts » pour copier toutes les lignes Set-Cookie d'origine ; pour un traitement programmatique, consultez « Aperçu JSON »

FAQ

Pourquoi l'en-tête Set-Cookie a-t-il été défini avec succès mais le navigateur n'a-t-il pas enregistré mon cookie ?

C'est le problème le plus courant. Les navigateurs ne signalent pas activement les erreurs ; ils rejettent silencieusement les cookies non conformes. Les causes courantes incluent : SameSite=None sans Secure, cookies Secure définis sur des pages HTTP (exception localhost), préfixes __Host-/__Secure- ne satisfaisant pas les contraintes, incompatibilité Domain/Path, dépassement de la limite de taille de 4 Ko, Max-Age étant 0 ou négatif. Nous recommandons d'abord de coller vos en-têtes Set-Cookie dans cet outil pour vérifier les badges d'avertissement et identifier la cause spécifique, puis d'ouvrir Chrome DevTools → Application → Cookies, de chercher un triangle d'avertissement jaune sous le domaine correspondant et de le survoler pour afficher la raison exacte du rejet.

Quelle est exactement la différence entre Strict, Lax et None pour SameSite ? Quand utiliser lequel ?

Strict n'autorise absolument pas l'envoi intersite — le plus sûr, mais les utilisateurs cliquant depuis des liens externes semblent déconnectés, adapté aux cookies d'opérations sensibles comme les paiements/changements de mot de passe. Lax est la valeur par défaut dans Chrome 80+, autorisant l'envoi de cookies lorsque les utilisateurs naviguent vers votre site via GET de niveau supérieur depuis des liens externes (en cliquant sur un lien externe vers votre site), mais pas pour les sous-ressources comme iframe/img/script/XHR/formulaires POST — valeur recommandée pour la plupart des scénarios. None autorise l'envoi dans tous les scénarios intersites (pour l'authentification unique SSO, les iframes intégrés tiers, les appels API intersites) mais doit être associé à Secure, sinon le navigateur le rejette purement et simplement.

Pourquoi SameSite=None doit-il être associé à Secure ?

C'est une règle que Chrome applique depuis la version 80 (février 2020), et Firefox, Edge et Safari ont tous emboîté le pas. Comme SameSite=None autorise explicitement l'envoi intersite de cookies, les attaquants peuvent plus facilement lancer des CSRF ou écouter dans des scénarios intersites, il doit donc être associé à Secure (transmission chiffrée HTTPS) pour atténuer les risques. Si votre cookie SameSite=None est défini sur HTTP, le navigateur le rejette simplement sans le stocker. Cet outil détecte les combinaisons SameSite=None-sans-Secure et les signale par des avertissements rouges.

Dois-je utiliser Max-Age ou Expires ? Quelle est la différence ?

Préférez Max-Age. Max-Age est un temps relatif (expire après N secondes), ne dépend pas de l'horloge client et le navigateur commence le compte à rebours à la réception ; Expires est un point dans le temps absolu, dépendant de l'heure locale de l'ordinateur de l'utilisateur (si un utilisateur règle son horloge sur 1970, le cookie expire immédiatement). Lorsque les deux sont présents, Max-Age a priorité (spécifié explicitement par la RFC 6265). Si aucun des deux n'est défini, le cookie devient un « cookie de session » qui expire lorsque le navigateur est fermé. Cet outil invite lorsque Expires est défini sans Max-Age, recommandant d'ajouter Max-Age. Note : L'unité de Max-Age est la seconde, pas la milliseconde.

Quelle est la différence entre Path=/ et l'absence de définition de Path ?

Path détermine pour quelles requêtes de chemin URL le navigateur inclura ce cookie. Lorsque Path n'est pas défini, le navigateur utilise par défaut « le chemin de l'URL de réponse sans le dernier segment » — par exemple, lors de la définition d'un cookie depuis /api/user/login, le Path par défaut est /api/user/, donc les requêtes sous / et /order/ n'incluront pas ce cookie. Définir explicitement Path=/ rend le cookie actif sur l'ensemble du site. Notez que la correspondance de Path est une correspondance de préfixe — Path=/api correspond également à /api/, /api/user, /api/v2/abc, etc. Les cookies préfixés __Host- nécessitent Path=/.

Quelle est la différence entre un Domain avec un point en tête (comme .example.com) et sans point ?

Dans les navigateurs modernes (versions récentes de Chrome, Firefox, Edge, Safari), les deux sont équivalents — tous deux rendent le cookie valide pour example.com et tous ses sous-domaines (a.example.com, b.c.example.com). Le point en tête était une ancienne syntaxe de l'époque de la RFC 2109 ; la RFC 6265 spécifie explicitement d'ignorer les points en tête. Cependant, la forme sans point est recommandée pour la lisibilité. Cet outil signale les Domain avec un point en tête (pas une erreur, mais une notation historique héritée). Note : Lorsque Domain n'est pas défini, le cookie s'applique uniquement à l'hôte actuel (les sous-domaines ne le recevront pas) ; définir Domain le rend applicable aux sous-domaines.

Que sont les préfixes __Host- et __Secure- ? Puis-je les omettre ?

Ce sont des préfixes de sécurité de nom de cookie introduits dans la RFC 6265bis pour ajouter des contraintes strictes aux cookies à haute sécurité : lorsque les navigateurs voient qu'un nom de cookie commence par __Host-, ils imposent que Secure soit défini, que Path soit / et que Domain ne soit pas défini — si une condition n'est pas remplie, le stockage est purement et simplement rejeté ; le préfixe __Secure- nécessite que Secure soit défini, les autres attributs sont configurables. Les cookies fonctionnent également sans préfixes (la plupart des cookies n'utilisent pas de préfixes), mais __Host- est fortement recommandé pour les cookies à haute sécurité comme les identifiants de session et les jetons d'authentification, car il empêche les attaques par injection de cookies au niveau sous-domaine/chemin. Cet outil détecte automatiquement la conformité des deux types de préfixes.

Les cookies HttpOnly sont-ils vraiment sécurisés ? Empêchent-ils les XSS et CSRF ?

HttpOnly empêche JavaScript de lire les valeurs de cookie via document.cookie, ce qui en fait une ligne de défense importante pour l'<strong>atténuation du vol de session XSS</strong>, mais ce n'est pas une solution miracle : les attaquants XSS peuvent toujours initier des requêtes dans le navigateur de l'utilisateur (qui incluent automatiquement les cookies) pour effectuer des actions (c'est le domaine du CSRF) ; HttpOnly ne défend pas non plus contre les attaques CSRF (nécessite SameSite ou des jetons CSRF). Le trio complet HttpOnly+Secure+SameSite=Lax/Strict doit être utilisé ensemble pour atteindre un niveau de sécurité de base. Les cookies sensibles (session, JWT, access_token) doivent être HttpOnly ; ne les exposez pas au JS frontend sauf si nécessaire. Cet outil avertit sur les cookies sans HttpOnly.

Que sont les cookies Partitioned (CHIPS) ? Quand dois-je les utiliser ?

Partitioned est un nouvel attribut que Chrome a introduit en préparation de la suppression des cookies tiers, abréviation de Cookies Having Independent Partitioned State (CHIPS). Les cookies tiers traditionnels (comme ceux définis par les services de publicité/intégration sur plusieurs sites) sont partagés globalement et pouvaient être utilisés pour le suivi intersite des utilisateurs. Avec Partitioned ajouté, les navigateurs stockent ce cookie tiers séparément par site de niveau supérieur : le cookie tiers qu'un utilisateur voit sur le Site A est complètement indépendant de celui sur le Site B, sans partage d'identité intersite. Cas d'utilisation : composants vidéo/carte/paiement intégrés, plugins de chat tiers, iframes SSO intersites intégrés. Partitioned doit être utilisé avec Secure et est recommandé avec le préfixe __Host-.

Combien de données un seul cookie peut-il stocker ? Combien peut-on en placer par domaine ?

Selon la RFC 6265, les navigateurs doivent prendre en charge au moins 4096 octets par cookie (nom, valeur et attributs inclus). Les navigateurs majeurs (Chrome/Firefox/Safari/Edge) appliquent tous cette limite ; l'excédent est silencieusement tronqué ou supprimé. Les limites de nombre varient selon le navigateur : Chrome autorise ~180 par domaine, Firefox ~150, Safari ~600 (et est affecté par la politique de nettoyage de 7 jours d'ITP), après quoi les navigateurs évincents les cookies les plus anciens via une stratégie LRU. Nous recommandons que les cookies ne stockent que des identifiants de session — ne placez pas de gros blocs de données métier dans les cookies (stockez les données métier dans localStorage ou des sessions côté serveur).

L'outil prend-il en charge l'analyse de Set-Cookie copié directement depuis Chrome DevTools ? Dois-je supprimer les préfixes manuellement ?

Pris en charge entièrement — aucun traitement manuel nécessaire. Vous pouvez accéder à Chrome DevTools → panneau Network, cliquer sur la requête cible, faire un clic droit sur la valeur Set-Cookie dans la section Response Headers et copier directement (pour plusieurs lignes, Ctrl/⌘+clic pour une sélection multiple ou copier le bloc entier), puis coller dans la zone de saisie de cet outil. L'outil retire automatiquement le préfixe Set-Cookie: du début de chaque ligne (insensible à la casse), traite les espaces en début/fin de ligne, traite correctement les caractères spéciaux comme les virgules et les points-virgules dans les dates Expires et traite correctement les valeurs de cookie entre guillemets doubles.

Pourquoi les caractères chinois ou spéciaux dans les valeurs de cookie deviennent-ils sous forme %XX ?

La RFC 6265 exige que les valeurs de cookie n'utilisent qu'un sous-ensemble sécurisé du jeu de caractères ASCII et ne peuvent pas contenir directement de caractères chinois, espaces, virgules, points-virgules, etc. De nombreux frameworks côté serveur encodent automatiquement en URL (encodeURIComponent/encodage pour cent) les caractères non ASCII lors de la définition des cookies, par ex. « 你好 » est encodé en %E4%BD%A0%E5%A5%BD. Les navigateurs conservent également la forme encodée lors du renvoi. Lorsque cet outil détecte que des valeurs contiennent un encodage %XX, il affiche automatiquement le texte original décodé par decodeURIComponent à côté de la valeur brute avec une flèche verte pour faciliter la vérification du contenu réel.

Quelle est la différence entre Set-Cookie et l'en-tête de requête Cookie ?

Ce sont des en-têtes dans des directions complètement opposées : Set-Cookie est un en-tête de réponse (serveur → navigateur), n'apparaît que dans les réponses, peut apparaître plusieurs fois et définit à chaque fois un cookie avec des attributs complets (Secure/HttpOnly/Path/Domain/etc.) ; Cookie est un en-tête de requête (navigateur → serveur), n'apparaît qu'une seule fois par requête et contient des paires name=value plates (name1=v1; name2=v2) de tous les cookies correspondant à la portée, sans aucune information d'attribut. Cela signifie que les serveurs ne peuvent pas savoir à partir des requêtes si un cookie a HttpOnly ou Secure défini — les informations d'attribut ne sont conservées que par le navigateur lors du stockage local. Pour analyser les en-têtes de requête Cookie, utilisez l'<a href='/network/http-cookie-parser/'>analyseur d'en-tête de requête Cookie</a> associé.

Pourquoi mes cookies disparaissent-ils après quelques jours dans Safari ?

C'est le mécanisme d'Intelligent Tracking Prevention (ITP) de Safari qui est à l'œuvre. Depuis ITP 2.1, si un utilisateur n'interagit pas directement avec un domaine pendant 7 jours (c'est-à-dire n'a pas visité directement le site de ce domaine), Safari nettoie tous les cookies et données de site sous ce domaine, indépendamment de la durée définie pour Max-Age/Expires. Cela a le plus grand impact sur les services intégrés tiers, tandis que les cookies du site principal ne sont pas affectés tant que les utilisateurs continuent de visiter. De plus, les restrictions de Safari sur les cookies tiers sont plus strictes que celles de Chrome. Les solutions incluent : l'utilisation de l'attribut Partitioned, la demande d'autorisations via l'API Storage Access, ou l'actualisation des cookies lorsque les utilisateurs visitent le site principal. La section de dépannage de cet outil contient des conseils de débogage Safari plus détaillés.

L'outil prend-il en charge l'analyse en masse de plusieurs en-têtes Set-Cookie ? Le contenu des cookies est-il téléchargé sur des serveurs ?

L'analyse en masse est prise en charge. La zone de saisie prend en charge le collage d'un nombre quelconque d'en-têtes Set-Cookie multi-lignes (par exemple, coller un bloc d'en-tête de réponse entier en une fois). Chaque Set-Cookie est analysé avec une numérotation indépendante, avec plusieurs cartes d'attributs affichant leurs attributs et avertissements respectifs. Tous les processus d'analyse s'exécutent entièrement localement dans votre navigateur (traitement JavaScript frontend pur). Le contenu des cookies n'est jamais téléchargé sur aucun serveur, aucune requête réseau n'est effectuée, et les informations sensibles comme les sessions/tokens que vous collez ne quittent jamais votre ordinateur — utilisez-le en toute confiance.

术语表

Set-Cookie
En-tête de réponse HTTP par lequel le serveur indique au navigateur de stocker des cookies ; peut apparaître plusieurs fois dans une seule réponse.
Cookie (en-tête de requête)
En-tête de requête HTTP contenant une liste de paires nom-valeur de cookies conformes à la portée, automatiquement ajoutées par le navigateur, sans attributs.
HttpOnly
Indicateur d'attribut de cookie. Lorsqu'il est défini, JavaScript ne peut pas lire le cookie via document.cookie, servant principalement à se défendre contre le vol de session XSS.
Secure
Indicateur d'attribut de cookie. Lorsqu'il est défini, le navigateur n'envoie ce cookie que sur des connexions chiffrées HTTPS (ou localhost).
SameSite
Attribut de cookie contrôlant si les cookies sont envoyés lors des requêtes intersites ; les valeurs sont Strict/Lax/None. La valeur par défaut est Lax dans Chrome 80+.
Max-Age
Attribut de cookie spécifiant la durée de vie du cookie en secondes. A priorité sur Expires, recommandé. =0 signifie suppression immédiate.
Expires
Attribut de cookie spécifiant un point dans le temps d'expiration spécifique (HTTP-date), dépendant de l'horloge du client.
Path
Attribut de cookie limitant le préfixe de chemin URL où le cookie est actif ; par défaut la partie répertoire de l'URL de réponse.
Domain
Attribut de cookie limitant le domaine où le cookie est actif. S'il n'est pas défini, uniquement l'hôte actuel ; s'il est défini, s'applique également aux sous-domaines.
Partitioned (CHIPS)
Indicateur d'attribut de cookie activant le stockage partitionné des cookies tiers ; l'approche de remplacement après la suppression des cookies tiers par Chrome, doit être associé à Secure.
Préfixe __Host-
Contrainte de sécurité de préfixe de nom de cookie. Nécessite Secure, Path=/, pas d'attribut Domain ; les navigateurs refusent le stockage en cas de violation.
Préfixe __Secure-
Contrainte de sécurité de préfixe de nom de cookie. Nécessite que Secure soit défini ; les navigateurs refusent le stockage en cas de violation.
Cookie de session (Session Cookie)
Un cookie sans Max-Age ni Expires définis ; automatiquement supprimé lorsque le navigateur est fermé.
Cookie tiers (Third-party Cookie)
Un cookie défini sous un domaine autre que la page actuellement visitée, généralement par des publicités, des analyses, des iframes intégrés et d'autres services tiers ; progressivement restreint sur tous les navigateurs.

Tableau de comparaison rapide des trois stratégies SameSite

Tableau de référence complet des attributs Set-Cookie (RFC 6265bis)

Limites courantes de taille et de nombre de Set-Cookie par navigateur

Troubleshooting