Ich habe zwei Fragen. Ich verstehe, dass, wenn ich die Domain als .mydomain.com
(mit dem führenden Punkt) im Cookie spezifiziere , alle Subdomains ein Cookie gemeinsam nutzen können.
Kann subdomain.mydomain.com
auf ein Cookie zugreifen, das in mydomain.com
(ohne die www
Subdomain) erstellt wurde?
Kann mydomain.com
(ohne die www
Subdomain) auf das Cookie zugreifen, wenn es in erstellt wurde subdomain.mydomain.com
?
Antworten:
Die 2 - Domänen
mydomain.com
undsubdomain.mydomain.com
können Cookies nur freigeben , wenn die Domäne explizit im NamenSet-Cookie
Header. Andernfalls ist der Umfang des Cookies auf den Anforderungshost beschränkt. (Dies wird als "Nur-Host-Cookie" bezeichnet. Siehe Was ist ein Nur-Host-Cookie? )Wenn Sie beispielsweise den folgenden Header von gesendet haben
subdomain.mydomain.com
, wird das Cookie nicht für Anforderungen an folgende Adresse gesendetmydomain.com
:Wenn Sie jedoch Folgendes verwenden, kann es auf beiden Domänen verwendet werden:
Dieser Cookie wird für jeden gesendet Subdomain von mydomain.com gesendet, einschließlich verschachtelter Subdomains wie
subsub.subdomain.mydomain.com
.In RFC 2109 bedeutete eine Domäne ohne führenden Punkt, dass sie nicht für Subdomänen verwendet werden konnte, und nur ein führender Punkt (
.mydomain.com
) ermöglichte die Verwendung für mehrere Unterdomänen (jedoch nicht für die Domäne der obersten Ebene) in der älteren Spezifikation nicht möglich).Alle modernen Browser respektieren jedoch die neuere Spezifikation RFC 6265 und ignorieren alle führenden Punkte. Dies bedeutet, dass Sie das Cookie sowohl für Subdomains als auch für die Top-Level-Domain verwenden können.
Wenn Sie ein Cookie wie im zweiten Beispiel oben von setzen
mydomain.com
, ist es zusammenfassend zugänglichsubdomain.mydomain.com
und umgekehrt. Dies kann auch verwendet werden, um Cookies zuzulassensub1.mydomain.com
undsub2.mydomain.com
zu teilen.Siehe auch:
quelle
domain=.mydomain.com
nicht für die bloße mydomain.com gültig, daher sind die beiden RFCs nicht miteinander kompatibel.Ich bin nicht sicher, ob die Antwort von @cmbuckley das vollständige Bild zeigt. Was ich lese ist:
Ebenfalls
Für mich bedeutet dies, dass Sie Cookies vor dem Lesen durch Subdomain / Domain schützen können, aber nicht verhindern können, dass Cookies in die anderen Domains geschrieben werden. Daher kann jemand Ihre Website-Cookies neu schreiben, indem er eine andere Subdomain steuert, die von demselben Browser besucht wird. Was vielleicht kein großes Problem ist.
Fantastische Cookies-Testseite von @cmbuckley / für diejenigen, die sie in seiner Antwort verpasst haben, wie ich; es lohnt sich nach oben zu scrollen und zu stimmen /:
quelle
domain
, wird das Cookie nur für den Anforderungshost verwendet. Dies bedeutet, dassSet-Cookie: name=value
frommydomain.com
nicht mit Anfragen an Subdomains gesendet wird. Spielen Sie auch mit diesem Testskript .Hier ist ein Beispiel für die Verwendung der DOM-Cookie-API ( https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie ), damit wir das Verhalten selbst sehen können.
Wenn wir folgendes JavaScript ausführen:
Es scheint dasselbe zu sein wie das Ausführen von:
Der Cookie- Schlüssel wird (nur) auf der Domain mydomain.com verfügbar .
Wenn Sie nun das folgende JavaScript auf mydomain.com ausführen:
Die Cookie - Taste wird zur Verfügung mydomain.com sowie subdomain.mydomain.com .
Wenn Sie schließlich versuchen würden, Folgendes auf subdomain.mydomain.com auszuführen:
Wird der Cookie- Schlüssel für subdomain.mydomain.com verfügbar ? Ich war ein bisschen überrascht, dass dies erlaubt ist; Ich hatte angenommen, dass es eine Sicherheitsverletzung für eine Subdomain wäre, ein Cookie für eine übergeordnete Domain setzen zu können.
quelle
httponly
Cookies im Vergleich zu der Art von Cookies beschreiben, die Sie erstellen.domain
Attribut bewirkt, dass das Cookie für Subdomänen funktioniert; kein solches Attribut funktioniert nicht). Führende Punkte werden bestenfalls ignoriert und im schlimmsten Fall aktiv blockiert.Bitte beachten Sie, dass Sie ein Cookie aus einer Subdomain in einer Domain setzen können.
(in der Antwort für die Anfrage gesendet
subdomain.mydomain.com
)Sie können jedoch kein Cookie von einer Domain in einer Subdomain setzen.
(in der Antwort für die Anfrage gesendet
mydomain.com
)WARUM ?
Gemäß den Spezifikationen RFC 6265 Abschnitt 5.3.6 Speichermodell
und RFC 6265 Abschnitt 5.1.3 Domain Matching
Die Domain "subdomain.mydomain.com" stimmt also mit "mydomain.com" überein, aber "mydomain.com" stimmt NICHT mit der Domain "subdomain.mydomain.com" überein.
Überprüfen Sie auch diese Antwort .
quelle
In beiden Fällen ist dies der Fall, und dies ist das Standardverhalten für IE und Edge.
Die anderen Antworten liefern wertvolle Erkenntnisse, beschreiben jedoch hauptsächlich das Verhalten in Chrome. Es ist wichtig zu beachten, dass das Verhalten im IE völlig anders ist. Das sehr hilfreiche Testskript von CMBuckley zeigt, dass in (z. B.) Chrome die Cookies nicht zwischen Root- und Subdomains geteilt werden, wenn keine Domain angegeben ist. Der gleiche Test im IE zeigt jedoch, dass sie gemeinsam genutzt werden. Dieser IE-Fall entspricht eher der Beschreibung zum Mitnehmen im CMBuckley-Link www-or-not-www. Ich weiß, dass dies der Fall ist, weil wir ein System haben, das verschiedene Service-Stack-Cookies sowohl im Root als auch in der Subdomain verwendet. Es hat alles gut funktioniert, bis jemand im IE darauf zugegriffen hat und die beiden Systeme darüber gestritten haben, wessen Sitzungscookie gewinnen würde, bis wir den Cache in die Luft gesprengt haben.
quelle
Seien Sie vorsichtig, wenn Sie an localhost arbeiten! Wenn Sie Ihren Cookie in js wie folgt speichern:
Es ist möglicherweise nicht für Ihre Subdomain zugänglich, wie z
sub.localhost
. Um dieses Problem zu lösen, müssen Sie Virtual Host verwenden . Zum Beispiel können Sie Ihren virtuellen Host mit konfigurieren,ServerName
localhost.com
dann können Sie Ihr Cookie wie folgt in Ihrer Domain und Subdomain speichern:quelle
Einfache Lösung
Der 5. Parameter von Setcookie bestimmt die (Unter-) Domänen, für die das Cookie verfügbar ist. Wenn Sie es auf (BEISPIEL.COM) setzen, steht es jeder Subdomain zur Verfügung (z. B. SUBDOMAIN.EXAMPLE.COM).
Referenz: http://php.net/manual/en/function.setcookie.php
quelle