431 votes

Comment fonctionnent les domaines cookie de navigateur ?

En raison bizarre de domaine/sous-domaine du cookie de questions que je reçois, je voudrais savoir comment les navigateurs gérer les cookies. Si ils le font de différentes manières, il serait bon de connaître la différence.

En d'autres termes, lorsqu'un navigateur reçoit un cookie, un cookie PEUT avoir un domaine et un chemin d'accès attaché à elle. Ou pas, auquel cas le navigateur probablement substituts des valeurs par défaut pour eux. Question 1: quels sont-ils?

Plus tard, lorsque le navigateur est sur le point de faire une requête, il vérifie ses cookies et filtre à celles qu'il doit envoyer à cette demande. Il le fait par correspondance contre les demandes de chemin d'accès et nom de domaine. Question 2: quelles sont les règles de correspondance?


Ajouté:

La raison pour laquelle je me demande c'est parce que je suis intéressé, dans certains cas limites. Comme:

  • Un cookie pour l' .example.com être disponible pour www.example.com?
  • Un cookie pour l' .example.com être disponible pour example.com?
  • Un cookie pour l' example.com être disponible pour www.example.com?
  • Un cookie pour l' example.com être disponible pour anotherexample.com?
  • Va www.example.com être en mesure de définir un cookie pour l' example.com?
  • Va www.example.com être en mesure de définir un cookie pour l' www2.example.com?
  • Va www.example.com être en mesure de définir un cookie pour l' .com?
  • Etc.

Ajout de 2:

Aussi, quelqu'un pourrait suggérer comment je dois définir un cookie de sorte que:

  • Il peut être réglé soit en www.example.com ou example.com;
  • Il est accessible par les deux www.example.com et example.com.

406voto

Gumbo Points 279147

Bien qu'il soit le RFC 2965 (Set-Cookie2, avait déjà rendu obsolète la RFC 2109) qui doit définir le cookie de nos jours, la plupart des navigateurs n'est pas entièrement en charge, mais seulement de se conformer à la spécification d'origine par Netscape.

Il y a une distinction entre le Domaine de valeur de l'attribut et de l'efficace de domaine: la première est prise à partir de l' Set-Cookie champ d'en-tête et le dernier est l'interprétation de la valeur de l'attribut. Selon la RFC 2965, les éléments suivants devraient s'appliquer:

  • Si la Set-Cookie champ d'en-tête n'est pas d'avoir un Domaine d'attribut, le domaine est le domaine de la demande.
  • S'il est un Domaine de l'attribut présent, sa valeur sera utilisée comme efficace de domaine (si la valeur ne démarre pas avec un . il sera ajouté par le client).

Avoir l'efficacité de domaine, il faut aussi du domaine de match actuelles de domaine demandé d'être ensemble; sinon, le cookie sera révisé. La même règle s'applique pour le choix de l'cookies pour être envoyé dans une demande.


La cartographie de ces connaissances sur vos questions, les questions suivantes doivent s'appliquer:

  • Cookie Domain=.example.com va être disponible pour www.example.com
  • Cookie Domain=.example.com va être disponible pour example.com
  • Cookie Domain=example.com seront convertis en .example.com et ainsi va également être disponible pour www.example.com
  • Cookie Domain=example.com pourront pas être disponibles pour anotherexample.com
  • www.example.com va être en mesure de définir un cookie pour l' example.com
  • www.example.com va pas être en mesure de définir un cookie pour l' www2.example.com
  • www.example.com va pas être en mesure de définir un cookie pour l' .com

Et de définir et de lire un cookie pour/par www.example.com et example.com, ensemble pour .www.example.com et .example.com respectivement. Mais le premier (.www.example.com) ne sera accessible qu'en d'autres domaines ci-dessous ce domaine (p. ex. foo.www.example.com ou bar.www.example.com) où .example.com peut également être consulté par tout autre domaine ci-dessous example.com (par ex. foo.example.com ou bar.example.com).

10voto

AnthonyWJones Points 122520

Pour une large couverture de la revue le contenu de RFC2965. Bien sûr, cela ne signifie pas nécessairement que tous les navigateurs se comportent exactement de la même manière.

Cependant, en général, la règle de Chemin d'accès par défaut si aucune n'est spécifiée dans le cookie est le chemin dans l'URL à partir de laquelle l'-tête Set-Cookie est arrivé. De même, la valeur par défaut pour le nom de Domaine est le nom complet de l'hôte dans l'URL à partir de laquelle le Set-Cookie est arrivé.

Les règles de correspondance pour le domaine exiger le Domaine de cookie pour correspondre à l'hôte à qui la demande est faite. Le cookie peut spécifier un plus large domaine de match par comprendre *. dans le domaine de l'attribut de Set-Cookie (ce secteur que les navigateurs peuvent varier). Correspondant au chemin d'accès (en supposant que le domaine correspond) est une simple question que le chemin demandé doit être dans le chemin d'accès spécifié sur le cookie. Généralement les cookies de session sont fixés avec le path=/ ou path=/applicationName/ si le cookie est disponible à toutes les demandes dans l'application.


Réponse à Ajouté:
  • Un cookie .example.com être disponible pour www.example.com? Oui
  • Un cookie .example.com être disponible pour example.com? Ne Sais pas
  • Un cookie pour example.com être disponible pour www.example.com? Ne devrait pas, mais... *
  • Un cookie pour example.com être disponible pour anotherexample.com? Pas de
  • Va www.example.com être en mesure de définir un cookie pour l'example.com? Oui
  • Va www.example.com être en mesure de définir un cookie pour l'www2.example.com? Aucun (à l'Exception de via .example.com)
  • Va www.example.com être en mesure de définir un cookie pour l' .com? Pas (ne Peut pas définir un cookie de ce haut de l'espace de noms et vous ne pouvez en définir un pour quelque chose comme .co.royaume-uni).

* - Je ne suis pas en mesure de tester ce droit maintenant, mais j'ai une petite idée au moins IE7/6 traiterais le chemin de example.com comme si c'était .example.com.

8voto

Victor Akimov Points 71

La dernière (troisième à être exactement) RFC pour ce problème est la RFC-6265 (Obsolètes RFC 2965 qui à son tour obsolètes RFC 2109).

Selon elle, si le serveur ne mentionne pas l'attribut de Domaine, l'agent de l'utilisateur sera de retour le témoin, seulement pour le serveur d'origine (le serveur sur lequel une ressource donnée réside). Mais c'est aussi l' avertissement que certains agents utilisateurs traiter un absent attribut de Domaine que si l'attribut de Domaine étaient présents et qui contenait le nom d'hôte actuel (Par exemple, si example.com renvoie un en-tête Set-Cookie sans un attribut de Domaine, ces agents d'utilisateur à tort envoyer le cookie www.example.com ainsi).

Lorsque l'attribut de Domaine ont été spécifiée, elle sera traitée comme nom de domaine complet (si il y a le point attribut, il sera ignoré). Le serveur doit correspondre au domaine spécifié dans l'attribut (qui ont exactement le même nom de domaine ou un sous-domaine) pour ce cookie. Plus précisément, il spécifié ici.

Ainsi, par exemple:

  • cookie attribut Domain=.example.com est équivalent à Domain=example.com
  • les cookies avec un tel Domaine attributs seront disponibles pour example.com et www.example.com
  • les cookies avec un tel Domaine attributs seront pas disponibles pour another-example.com
  • la spécification de cookie attribut comme Domain=www.example.com va se fermer la voie à www4.example.com

PS: virgule dans le Domaine de l'attribut sera la cause de l'agent utilisateur d'ignorer l'attribut =(

4voto

Julian Reschke Points 12698

Les RFC sont réputés non reflètent la réalité.

Mieux contrôler projet-ietf-httpstate-cookie, travaux en cours.

3voto

Gert-Jan Strik Points 11

Il y a des règles qui déterminent si un navigateur accepte le Jeu de l'en-tête en-tête de réponse (côté serveur cookie écrit), une des règles légèrement différentes ou interprétations cookie défini à l'aide de Javascript (je n'ai pas testé VBScript).

Ensuite, il y a des règles qui permettent de déterminer si le navigateur va envoyer un cookie avec la demande de page.

Il y a des différences entre les principaux moteurs de navigateur comment domaine correspond à sont gérées, et de la façon dont les paramètres dans le chemin de l'interprétation des valeurs. Vous pouvez trouver des preuves empiriques dans l'article Comment les Différents Navigateurs Gérer les Cookies Différemment

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X