PHP: Cookie-Domain-/Subdomain-Steuerung

Lesezeit: 4 Minuten

Ich arbeite an einer Website mit mehreren Subdomains, von denen einige ihre eigene Sitzung erhalten sollten.

Ich glaube, ich habe es hinbekommen, aber ich habe etwas über die Handhabung von Cookies bemerkt, das ich nicht verstehe. Ich sehe nichts in den Dokumenten, das es erklärt, also dachte ich, ich würde sehen, ob hier jemand etwas Licht in die Frage bringen kann.

Wenn ich nur mache:

session_start();

Am Ende habe ich ein Session-Cookie wie dieses:

subdomain.beispiel.net

Wenn ich jedoch versuche, die Cookie-Domain selbst zu setzen, entweder wie

ini_set('session.cookie_domain', 'subdomain.example.net');

oder ähnliches

session_set_cookie_params( 0, "https://stackoverflow.com/", "subdomain.example.net", false, false);

Am Ende habe ich ein Cookie für .subdomain.example.net (beachten Sie den öffnenden Punkt), was meiner Meinung nach “alle Subdomains (oder in diesem Fall Sub-Subdomains) abgleichen” bedeutet.

Dies scheint tatsächlich mit allen meinen Cookies zu passieren, nicht nur mit Sitzungen. Wenn ich die Cookie-Domain selbst setze, wird ihr automatisch der Punkt vorangestellt, also diese Domain und alle Subs davon. Wenn ich die Domäne nicht festlege, wird sie richtig ausgeführt, indem nur die aktuelle Domäne verwendet wird.

Irgendeine Idee, was das verursacht und was ich tun kann, um diesen vorangestellten Punkt zu kontrollieren?

Danke!

  • Sie müssen den führenden Punkt nicht kontrollieren, weil es einfach ist ignoriert durch den Browser gemäß RFC 6265, was jeder moderne Browser implementiert. Denken Sie also nicht an den führenden Punkt. Setzen Sie außerdem die Cookie-Domäne explizit oder auf einen leeren String, um sie auf den aktuellen Anforderungshost zu beschränken. Die Bibliothek github.com/delight-im/PHP-Cookie hat einige praktische Steuerelemente dafür.

    – kräh

    13. Juli 2016 um 0:05 Uhr

Die Cookie-Funktionen von PHP stellen der $domain automatisch einen Punkt voran. Wenn Sie dieses Verhalten nicht möchten, können Sie die verwenden Header Funktion. Zum Beispiel:

header("Set-Cookie: cookiename=cookievalue; expires=Tue, 06-Jan-2009 23:39:49 GMT; path=/; domain=subdomain.example.net");

  • Wenn Sie den gesamten RFC 6265 lesen, werden Sie feststellen, dass die einzig richtige Möglichkeit, ein “host-only”-Cookie zu haben, darin besteht, das Domänenattribut NICHT zu setzen. tools.ietf.org/html/rfc6265#section-5.4

    – stolsvik

    14. November 2011 um 13:13 Uhr

  • “Der einzig richtige Weg, ein “Host-Only”-Cookie zu haben, besteht darin, das Domain-Attribut NICHT zu setzen” Nicht spezifisch für PHP, aber dies hat mir geholfen, ein Problem zu lösen, als wir von Nur-HOST-Cookies auf X-Subdomain-Cookies umgestellt haben und ich versuchte, das Host-Only-Cookie in Javascript zu löschen, indem die vollständige Domäne angegeben wurde, und JavaScript stellte einen Punkt voran, der dazu führte, dass die Domäne des vorhandenen Cookies nicht übereinstimmte und daher nicht entfernt wurde.

    – Scott Jungwirth

    30. Juni 2014 um 18:32 Uhr


Wenn Sie Ihr PHP-Skript unter “http://subdomain.beispiel.net“, Verwenden Sie nicht den Domänenparameter:

setcookie('cookiename','cookievalue',time()+(3600*24),"https://stackoverflow.com/");

Sie erhalten ein Cookie mit „subdomain.example.net“ (und nicht „.subdomain.example.net“)

  • Was ist der Unterschied zwischen einer explizit auf subdomain.example.net gesetzten Domain und einer nicht gesetzten Domain?

    – Schrittmacher

    7. Juni 2013 um 0:54 Uhr

  • Wenn Sie es setzen, erhalten Sie einen Punkt voran, der mit allen Subdomains übereinstimmt, anstatt nur mit der aktuellen Subdomain

    – Trosemann

    26. Juli 2013 um 20:48 Uhr

Wochenstart fur Locale mit Joda Time
stolsvik

Wenn Sie den gesamten RFC 6265 lesen, werden Sie feststellen, dass die einzig richtige Möglichkeit, ein “Host-Only”-Cookie zu haben, darin besteht, das Domänenattribut NICHT zu setzen.

https://www.rfc-editor.org/rfc/rfc6265#section-5.4

  • Wenn Sie die Domain auf “.example.com” setzen, sollte sie Host-only werden.

    – noahnu

    9. September 2012 um 22:53 Uhr

  • Danke, du hast meinen Tag gerettet! Dies sollte imo die akzeptierte Antwort sein

    – Alex

    4. Oktober 2021 um 8:34 Uhr


Mir ist klar, dass dies eine alte Frage ist, aber ich hatte dieses Problem und keine der obigen Antworten hat es ganz geschafft.

Ich wollte das Sitzungscookie für eine Subdomain setzen, aber auch httponly und sicher aktivieren.

Um eine führende . Vor der Subdomain haben Kevin und Stolsvik Recht, das Domain-Attribut nicht zu setzen.

Um dies zu tun und dennoch in der Lage zu sein, httponly und den sicheren Modus festzulegen, setzen Sie die Domäne wie folgt auf NULL:

session_set_cookie_params(0, "https://stackoverflow.com/", NULL, TRUE, TRUE);

Sie haben jetzt ein Sitzungscookie für eine bestimmte Subdomain (ohne führendes .), bei dem httponly und secure auf true gesetzt sind.

Dies kann jemandem helfen (ich habe einige Stunden damit verbracht, dies herauszufinden). Nachdem Sie die Änderungen in den Quelldateien vorgenommen haben und bevor Sie es testen, schließen Sie Ihren Browser, um PHPSESSIONID in allen Domänen und Subdomänen ordnungsgemäß zu zerstören.

Hoffe, das spart etwas Zeit!

  • Sie können auch den Sitzungsteil von Firebug verwenden, wenn Sie die Sitzungscookies explizit verwalten möchten.

    – Eli

    24. Januar 2011 um 21:46 Uhr

PHP Cookie Domain Subdomain Steuerung
Gendrith

Ich hatte ein Problem beim Setzen von Cookies auf WordPress und das hat mir geholfen, der Domain-Wert war der Schlüssel, damit es auf allen Seiten funktioniert

$domain = ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false;

setcookie("cookie_name", 'cookie_value', 0, "https://stackoverflow.com/", $domain);

  • Sie können auch den Sitzungsteil von Firebug verwenden, wenn Sie die Sitzungscookies explizit verwalten möchten.

    – Eli

    24. Januar 2011 um 21:46 Uhr

868450cookie-checkPHP: Cookie-Domain-/Subdomain-Steuerung

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy