2009-12-28 5 views

Antwort

9

Falls Sie versuchen, auf Cookies zuzugreifen, die für einen anderen Pfad auf der gleichen Domäne als der aktuellen festgelegt sind, kann dies nicht durchgeführt werden. Der Browser selbst schränkt dies ein und sendet nur die Cookies, die für den aktuellen Pfad geeignet sind.

+0

Was ist mit Facebook ?, Facebook schreibt Cookies für die Domain "facebook.com", aber es verwendet Cookies von "www.facebook.com" – user962284

+0

@ user962284 Sind Sie sicher? Ich bin mir ziemlich sicher, dass FB alle Cookies auf www.facebook.com setzt, da es nicht einmal möglich ist, auf facebook.com zuzugreifen (sie leiten Sie zu www um.) –

+0

Das ist falsch. Ein Browser, der den Empfehlungen des RFC * folgt, sendet * beide Werte zurück, wenn mehr als ein Cookie denselben Namen, aber unterschiedliche Pfade hat. Es ist tatsächlich PHP, das in die Quere kommt; Bitte sehen Sie meine gepostete Antwort. –

2

ja, es ist das vierte Argument ist, aber Sie werden nur in der Lage sein, den Cookie zugreifen, wenn es einen Pfad festgelegt wurde mit, dass das aktuelle Verzeichnis in residiert

, die verwirrend ist ... hier ist es von PHP:

Der Pfad auf dem Server, auf dem der Cookie verfügbar ist. Wenn der Wert '/' ist, ist der Cookie in der gesamten Domäne verfügbar. Wenn der Wert '/ foo /' ist, ist das Cookie nur im Verzeichnis/foo/ und in allen Unterverzeichnissen wie /foo/bar/der Domäne verfügbar. Der Standard Wert ist das aktuelle Verzeichnis, das das Cookie wird eingestellt in.

http://php.net/manual/en/function.setcookie.php

Sie darauf zugreifen wie jedes anderen Cookie. Es wird in $ _COOKIE verfügbar, wenn das Skript darauf zugreifen kann.

+0

Ich meine, wie es zu lesen, wie auf Cookie-Werte in verschiedenen Pfaden aber auf dem gleichen Domain-Namen zugreifen? – Steven

+0

Wie unterscheidet man sie? – Steven

+0

php tut das nicht für dich. das müsstest du selbst umsetzen. – Galen

2

Nein, solche Parameter sind nicht möglich, da der Browser den Pfad zum Server nicht sendet. Es sendet nur den Namen und den Wert jedes Cookies (so dass Sie den Pfad nicht sehen können, wenn es ein Session-Cookie ist, wenn es abläuft usw.).

2

Ich glaube nicht, dass es möglich sein wird, den Cookie von einem anderen Pfad zu bekommen, da dies möglicherweise ein Sicherheitsproblem verursachen könnte.

4

Während der HTTP-Client (dh: Browser) den Pfad, auf den der Cookie gesetzt wurde, nicht zurücksendet, macht PHP tatsächlich Annahmen über Cookies bezüglich seines $ _COOKIE Arrays.

Wenn Sie setzen zwei Cookies mit dem gleichen Namen, ein mit dem Wert „first-Wert“ mit Pfad / und die zweite mit dem Wert „zweiter Wert“ mit Pfad /Test, ein Browser nach dem empfohlen - aber nicht erforderlich - Verhalten vom RFC sendet beide Werte an Sie zurück. Wenn Sie eine URL unter dem Pfad/Test zuzugreifen, sendet der Browser diese:

Cookie: name=second-value, name=first-value 

Das "Problem" ist, dass PHP nur den ersten Wert liest - $ _COOKIE [ 'name'] enthält nur der Wert "zweiter Wert" ohne Hinweis darauf, dass "erster Wert" existiert. Wenn Sie Zugriff auf beide Werte benötigen, müssen Sie den Wert $ _SERVER ['HTTP_COOKIE'] selbst analysieren - dies wird "Name = zweiter Wert, Name = erster Wert" für das obige Beispiel enthalten. Beachten Sie, dass "zweiter Wert" zuerst in Zeile ist, da es mit einem längeren Pfad festgelegt wurde. Bitte beachten Sie, dass der RFC dieses Verhalten nicht garantiert, es besagt nur, dass HTTP-Clients SOLLEN dies tun sollten.

+0

Interessant, ist das spezifisch für Unterverzeichnisse? Wie bei einer Anfrage an ein Unterverzeichnis werden die Cookies des Roots empfangen, aber eine Anfrage an das Root erhält keine Cookies für Unterverzeichnisse? Ich bin auch neugierig, ob Browser dies tatsächlich implementieren oder nicht :) –

+0

Korrekt, ein Unterverzeichnis oder ein längerer Pfad erhalten immer einen Cookie mit einem kürzeren Pfad, der übereinstimmt. Alle Browser sind auf diese Weise implementiert. Das einzige nicht garantierte Verhalten ist, wenn Sie mehrere Cookies mit demselben Namen, aber unterschiedlichen Pfaden haben - Sie sollten * beide Cookies in einer festen Reihenfolge zurückerhalten, aber der RFC macht keine Versprechen. –

+0

Dies ist eigentlich die richtige Antwort, da es eine vollständige Erklärung gibt, warum dies passiert. Ich sollte beachten, und das fehlt, obwohl Sie '$ _COOKIE []' einen Pfad nicht sagen können, können Sie 'setcookie' einen Pfad sagen. Wir stehen vor einer solchen API. Sie können also 'setcookie' sagen, den Root-Pfad zu setzen und dann überall darauf zuzugreifen:' setcookie ('name', 'data', expire, '/') '. Dieser letzte Parameter ist der Pfad und setzt ihn auf '/', damit er zum Root-Pfad wird. Dies würde das Problem des OP lösen. – jfreak53

Verwandte Themen