J'ai deux questions. Je comprends que si je spécifie le domaine comme .mydomain.com
(avec le premier point) dans le cookie, tous les sous-domaines peuvent partager un cookie.
Peut subdomain.mydomain.com
accéder à un cookie créé dans mydomain.com
(sans le www
sous - domaine)?
Peut mydomain.com
(sans le www
sous - domaine) accéder au cookie s'il est créé en subdomain.mydomain.com
?
Réponses:
Les 2 domaines
mydomain.com
etsubdomain.mydomain.com
ne peuvent partager des cookies que si le domaine est explicitement nommé dans l'en-Set-Cookie
tête. Sinon, la portée du cookie est limitée à l'hôte de la demande. (Il s'agit d'un "cookie d'hôte uniquement". Voir Qu'est-ce qu'un cookie d'hôte uniquement? )Par exemple, si vous avez envoyé l'en-tête suivant
subdomain.mydomain.com
, le cookie ne sera pas envoyé pour les demandes àmydomain.com
:Cependant, si vous utilisez ce qui suit, il sera utilisable sur les deux domaines:
Ce cookie sera envoyé pour tout sous-domaine de mydomain.com, y compris les sous-domaines imbriqués comme
subsub.subdomain.mydomain.com
.Dans la RFC 2109 , un domaine sans point de tête signifiait qu'il ne pouvait pas être utilisé sur des sous-domaines, et seul un point de tête (
.mydomain.com
) lui permettrait d'être utilisé sur plusieurs sous-domaines (mais pas le domaine de niveau supérieur, donc ce que vous demandez était pas possible dans l'ancienne spécification).Cependant, tous les navigateurs modernes respectent la nouvelle spécification RFC 6265 et ignoreront tout point de tête, ce qui signifie que vous pouvez utiliser le cookie sur les sous-domaines ainsi que le domaine de premier niveau.
En résumé, si vous définissez un cookie comme le deuxième exemple ci-dessus
mydomain.com
, il serait accessible parsubdomain.mydomain.com
, et vice versa. Cela peut également être utilisé pour autorisersub1.mydomain.com
etsub2.mydomain.com
partager des cookies.Voir également:
la source
domain=.mydomain.com
n'est pas valide pour le mydomain.com nu, donc les deux RFC ne sont pas compatibles entre eux.Je ne suis pas sûr que la réponse @cmbuckley montre l'image complète. Ce que je lis c'est:
Aussi
Pour moi, cela signifie que vous pouvez protéger les cookies contre la lecture par sous-domaine / domaine mais ne pouvez pas empêcher l'écriture de cookies dans les autres domaines. Ainsi, quelqu'un peut réécrire les cookies de votre site en contrôlant un autre sous-domaine visité par le même navigateur. Ce qui pourrait ne pas être une grande préoccupation.
Site de test de cookies génial fourni par @cmbuckley / pour ceux qui l'ont manqué dans sa réponse comme moi; vaut la peine de faire défiler et de voter /:
la source
domain
, le cookie est uniquement utilisé pour l'hôte de la demande. Cela signifie queSet-Cookie: name=value
frommydomain.com
ne sera pas envoyé avec des demandes de sous-domaines. Jouez aussi avec ce script de test .Voici un exemple utilisant l'API de cookie DOM ( https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie ), afin que nous puissions voir par nous-mêmes le comportement.
Si nous exécutons le JavaScript suivant:
Il semble être identique à l'exécution:
La clé de cookie devient disponible (uniquement) sur le domaine mydomain.com .
Maintenant, si vous exécutez le JavaScript suivant sur mydomain.com:
La clé de cookie devient disponible pour mydomain.com ainsi que subdomain.mydomain.com .
Enfin, si vous deviez essayer d'exécuter ce qui suit sur subdomain.mydomain.com:
La clé de cookie est-elle disponible sur subdomain.mydomain.com ? J'ai été un peu surpris que cela soit permis; J'avais supposé que ce serait une violation de la sécurité pour un sous-domaine de pouvoir définir un cookie sur un domaine parent.
la source
httponly
cookies par rapport au type de cookies que vous créez.domain
attribut fait fonctionner le cookie sur des sous-domaines; aucun de ces attributs ne le fait). Les points de tête sont ignorés au mieux et activement bloqués au pire.Veuillez noter que vous pouvez définir un cookie à partir d'un sous-domaine sur un domaine.
(envoyé dans la réponse pour la demande
subdomain.mydomain.com
)Mais vous NE POUVEZ PAS définir un cookie à partir d'un domaine sur un sous-domaine.
(envoyé dans la réponse pour la demande
mydomain.com
)POURQUOI ?
Selon les spécifications RFC 6265 section 5.3.6 Modèle de stockage
et RFC 6265 section 5.1.3 Correspondance de domaine
Ainsi, le domaine "subdomain.mydomain.com" correspond à "mydomain.com", mais "mydomain.com" ne correspond pas au domaine "subdomain.mydomain.com".
Vérifiez également cette réponse .
la source
Dans les deux cas, c'est possible, et c'est le comportement par défaut pour IE et Edge.
Les autres réponses apportent des informations précieuses, mais décrivent principalement le comportement dans Chrome. il est important de noter que le comportement est complètement différent dans IE. Le script de test très utile de CMBuckley démontre que dans (disons) Chrome, les cookies ne sont pas partagés entre la racine et les sous-domaines quand aucun domaine n'est spécifié. Cependant, le même test dans IE montre qu'ils sont partagés. Ce cas IE est plus proche de la description à retenir dans le lien www-or-not-www de CMBuckley. Je sais que c'est le cas parce que nous avons un système qui utilise différents cookies de pile de service sur la racine et le sous-domaine. Tout a bien fonctionné jusqu'à ce que quelqu'un y accède dans IE et que les deux systèmes se disputent le cookie de session qui gagnerait jusqu'à ce que nous fassions exploser le cache.
la source
Soyez prudent si vous travaillez sur localhost! Si vous stockez votre cookie dans js comme ceci:
Il pourrait ne pas être accessible à votre sous-domaine, comme
sub.localhost
. Pour résoudre ce problème, vous devez utiliser l' hôte virtuel . Par exemple, vous pouvez configurer votre hôte virtuel avecServerName
localhost.com
ensuite vous pourrez stocker votre cookie sur votre domaine et sous-domaine comme ceci:la source
Solution simple
Le 5ème paramètre de Setcookie détermine les (sous) domaines auxquels le cookie est disponible. Le paramétrer sur (EXAMPLE.COM) le rend disponible pour tout sous-domaine (par exemple: SUBDOMAIN.EXAMPLE.COM)
Référence: http://php.net/manual/en/function.setcookie.php
la source