Aufgrund seltsamer Probleme mit Domain- / Subdomain-Cookies, die ich bekomme, möchte ich wissen, wie Browser mit Cookies umgehen. Wenn sie es auf unterschiedliche Weise tun, wäre es auch schön, die Unterschiede zu kennen.
Mit anderen Worten: Wenn ein Browser ein Cookie empfängt, kann diesem Cookie eine Domain und ein Pfad zugeordnet sein. Oder auch nicht. In diesem Fall ersetzt der Browser wahrscheinlich einige Standardeinstellungen. Frage 1: Was sind sie?
Später, wenn der Browser eine Anfrage stellen möchte, überprüft er seine Cookies und filtert diejenigen heraus, die er für diese Anfrage senden soll. Dazu werden sie mit dem Anforderungspfad und der Domäne abgeglichen. Frage 2: Was sind die Matching-Regeln?
Hinzugefügt:
Der Grund, warum ich das frage, ist, dass ich an einigen Randfällen interessiert bin. Mögen:
- Wird ein Cookie für
.example.com
verfügbar seinwww.example.com
? - Wird ein Cookie für
.example.com
verfügbar seinexample.com
? - Wird ein Cookie für
example.com
verfügbar seinwww.example.com
? - Wird ein Cookie für
example.com
verfügbar seinanotherexample.com
? - Kann
www.example.com
ein Cookie gesetzt werdenexample.com
? - Kann
www.example.com
ein Cookie gesetzt werdenwww2.example.com
? - Kann
www.example.com
ein Cookie gesetzt werden.com
? - Usw.
Hinzugefügt 2:
Könnte auch jemand vorschlagen, wie ich ein Cookie setzen soll, damit:
- Es kann entweder
www.example.com
oder eingestellt werdenexample.com
; - Es ist sowohl für
www.example.com
als auch zugänglichexample.com
.
Die vorherigen Antworten sind etwas veraltet.
RFC 6265 wurde 2011 auf der Grundlage des damaligen Browser-Konsenses veröffentlicht. Seitdem gab es einige Komplikationen mit öffentlichen Suffixdomänen. Ich habe einen Artikel geschrieben, der die aktuelle Situation erklärt - http://bayou.io/draft/cookie.domain.html
Zusammenfassend sind die Regeln für die Cookie-Domain zu beachten:
Die Ursprungsdomäne eines Cookies ist die Domäne der Ursprungsanforderung.
Wenn die Ursprungsdomäne eine IP ist, darf das Domänenattribut des Cookies nicht festgelegt werden.
Wenn das Domänenattribut eines Cookies nicht festgelegt ist, gilt das Cookie nur für seine Ursprungsdomäne.
Wenn das Domain-Attribut eines Cookies festgelegt ist,
Es kann abgeleitet werden, dass ein Cookie immer auf seine Ursprungsdomäne anwendbar ist.
Die Cookie-Domain sollte keinen führenden Punkt haben, wie in
.foo.com
- einfach verwendenfoo.com
Als Beispiel,
x.y.z.com
einstellen , dass ein Cookie - Domain an sich selbst oder Eltern -x.y.z.com
,y.z.com
,z.com
. Aber nichtcom
, was ein öffentliches Suffix ist.y.z.com
ist anwendbar aufy.z.com
,x.y.z.com
,a.x.y.z.com
usw.Beispiele für öffentliche Suffixe -
com
,edu
,uk
,co.uk
,blogspot.com
,compute.amazonaws.com
quelle
x.y.z.com
ein Cookie gesetzt werden kannz.com
?Für eine umfassende Berichterstattung lesen Sie den Inhalt von RFC2965 . Das bedeutet natürlich nicht unbedingt, dass sich alle Browser genau gleich verhalten.
Im Allgemeinen ist die Regel für den Standardpfad, wenn im Cookie keine angegeben ist, der Pfad in der URL, von der der Set-Cookie-Header angekommen ist. In ähnlicher Weise ist der Standard für die Domain der vollständige Hostname in der URL, von der das Set-Cookie eingetroffen ist.
Für Übereinstimmungsregeln für die Domäne muss die Cookie-Domäne mit dem Host übereinstimmen, an den die Anforderung gestellt wird. Das Cookie kann eine breitere Domain-Übereinstimmung durch include * angeben. im Domain-Attribut von Set-Cookie (dieser Bereich, in dem Browser variieren können). Das Abgleichen des Pfads (unter der Annahme, dass die Domäne übereinstimmt) ist eine einfache Sache, bei der der angeforderte Pfad innerhalb des im Cookie angegebenen Pfads liegen muss. In der Regel werden Sitzungscookies mit path = / oder path = / applicationName / gesetzt, sodass das Cookie für alle Anforderungen in der Anwendung verfügbar ist.
Antwort auf Hinzugefügt:
*
Ich kann dies derzeit nicht testen, aber ich habe eine Ahnung, dass mindestens IE7 / 6 den Pfadexample.com
so behandeln würde, als ob er es wäre.example.com
.quelle
Der letzte (dritte, um genau zu sein) RFC für dieses Problem ist RFC-6265 (Veraltet RFC-2965, der wiederum RFC-2109 veraltet).
Nach ihr , wenn der Server des Domain - Attribut weglässt, wird die User - Agent das Cookie nur zurück an den Ursprungsserver (der Server , auf dem eine bestimmte Ressource befindet). Es wird jedoch auch gewarnt, dass einige vorhandene Benutzeragenten ein fehlendes Domänenattribut so behandeln, als ob das Domänenattribut vorhanden wäre und den aktuellen Hostnamen enthält (wenn example.com beispielsweise einen Set-Cookie-Header ohne Domänenattribut zurückgibt, werden diese Benutzeragenten dies tun Senden Sie den Cookie fälschlicherweise auch an www.example.com.
Wenn das Domain-Attribut angegeben wurde, wird es als vollständiger Domain-Name behandelt (wenn der führende Punkt im Attribut vorhanden ist, wird er ignoriert). Der Server sollte mit der im Attribut angegebenen Domäne übereinstimmen (genau denselben Domänennamen haben oder eine Unterdomäne davon sein), um dieses Cookie zu erhalten. Genauer gesagt hier angegeben .
Also zum Beispiel:
Domain=.example.com
entsprichtDomain=example.com
Domain=www.example.com
wird der Weg für www4.example.com geschlossenPS: Durch ein nachfolgendes Komma im Domänenattribut ignoriert der Benutzeragent das Attribut = (
quelle
Ich habe alle Fälle in der neuesten Version von Chrome, Firefox und Safari im Jahr 2019 getestet.
Antwort auf Hinzugefügt:
quelle
Es ist bekannt, dass die RFCs nicht die Realität widerspiegeln.
Überprüfen Sie besser Draft-Ietf-httpstate-Cookie , in Arbeit.
quelle
Es gibt Regeln, die bestimmen, ob ein Browser den Set-Header-Antwortheader (serverseitiges Cookie-Schreiben) akzeptiert, eine etwas andere Regel / Interpretation für das Cookie-Set mit Javascript (ich habe VBScript nicht getestet).
Dann gibt es Regeln, die bestimmen, ob der Browser zusammen mit der Seitenanforderung ein Cookie sendet.
Es gibt Unterschiede zwischen den wichtigsten Browser-Engines, wie Domänenübereinstimmungen behandelt werden und wie Parameter in Pfadwerten interpretiert werden. Einige empirische Belege finden Sie im Artikel Wie verschiedene Browser Cookies unterschiedlich behandeln
quelle
Ich war überrascht, Abschnitt 3.3.2 über das Ablehnen von Cookies zu lesen:
http://tools.ietf.org/html/rfc2965
Das heißt, dass ein Browser ein Cookie von xyzcom mit der Domain .z.com ablehnen sollte, da 'xy' einen Punkt enthält. Sofern ich den RFC und / oder die obigen Fragen nicht falsch interpretiere, können folgende Fragen hinzugefügt werden:
Wird ein Cookie für .example.com für www.yyy.example.com verfügbar sein? Nein.
Wird ein Cookie, das vom Ursprungsserver www.yyy.example.com mit der Domain .example.com gesetzt wurde, vom Benutzeragenten an xxx.example.com gesendet? Nein.
quelle
z.com
aufz.com
und alle Subdomains.Nein,
example.com.fr
kann aber möglicherweise ein Cookie für setzenexample2.com.fr
. Firefox schützt davor, indem es eine Liste von TLDs führt: http://securitylabs.websense.com/content/Blogs/3108.aspxAnscheinend erlaubt Internet Explorer Domains mit zwei Buchstaben nicht, Cookies zu setzen, was vermutlich erklärt, warum
o2.ie
einfach umgeleitet wirdo2online.ie
. Das hatte ich mich oft gefragt.quelle