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
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:
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.
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
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.
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
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
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