Die Antwort zu einem Artikel auf SitePoint ist nicht vollständig. Bitte beachten Sie RFC 6265 (um fair zu sein, wurde diese RFC im Jahr 2011 veröffentlicht, nachdem diese Frage veröffentlicht wurde, die vorherige RFC 2965 von 2000 und RFC 2109 von 1997 ersetzt).
Abschnitt 5.4, Absatz 2 hat folgende zu sagen:
- Plätzchen mit längeren Pfaden aufgelistet mit kürzeren Wegen, bevor Cookies:
Der User-Agent der Cookie-Liste in der folgenden Reihenfolge sortieren soll.
HINWEIS: Nicht alle sortieren User Agents die Cookie-Liste in dieser Reihenfolge, aber diese Reihenfolge spiegelt gängige Praxis, wenn dieses Dokument geschrieben wurde, und, historisch gibt es Server, die (fälschlicherweise) hingen von diese Bestellung.
Es gibt auch dieses kleine Juwel in Abschnitt 4.2.2:
... Server, sollten Sie nicht auf die Serialisierungsordnung verlassen. In insbesondere, wenn der Cookie-Header zwei Cookies mit dem gleichen Namen enthält (z. B. die mit anderen Pfad- oder Domänenattributen festgelegt wurden), SOLLTEN sich Server NICHT auf die Reihenfolge verlassen, in der diese Cookies im Header erscheinen.
In Ihrem Beispiel Anfrage Cookie (Cookies: a = 2, a = 1) beachten, dass das Cookie mit dem Beispiel /Pfad gesetzt (a = 2) hat einen längeren Weg als der, mit dem Pfad / (a = 1) und so wird es zuerst an Sie zurückgeschickt, was der Empfehlung der Spezifikation entspricht. Somit sind Sie mehr oder weniger korrekt in der Annahme, dass Sie den ersten Wert auswählen können.
Leider ist die Sprache in RFCs verwendet wird, ist sehr spezifisch - die Verwendung der Worte SOLL und sollten Sie nicht Mehrdeutigkeit in RFCs einzuführen. Diese geben Konventionen an, die sollten befolgt werden, sind aber nicht erforderlich, um die Spezifikation zu entsprechen. Während ich den RFC dafür ziemlich gut verstehe, habe ich die Forschung nicht gemacht, um zu sehen, was reale Kunden tun; Es ist möglich, dass ein oder mehrere Browser oder andere Software, die als HTTP-Clients fungieren, das längste Pfad-Cookie (/Beispiel) nicht zuerst im Cookie: Header senden.
Wenn Sie in der Lage sind, den Wert des Cookies zu steuern, und Sie mögen Ihre Lösung narrensicher machen, sind Sie am besten aus entweder:
einen anderen Cookie-Namen unter Verwendung von in bestimmten Pfaden außer Kraft zu setzen, wie zum Beispiel:
- Set-Cookie: a-global = 1; path = /; Version = 1
- Set-Cookie: a-Beispiel = 2; Path =/example, Version = 1
Speichern der Pfad, den Sie in der Cookie-Wert müssen selbst:
- Set-Cookie: a = 1 & path = /; path = /; Version = 1
- Set-Cookie: a = 2 & path =/example; Path =/example, Version = 1
beiden Abhilfen erfordern zusätzliche Logik auf dem Server den gewünschten Cookie-Wert zu wählen, indem die angeforderte URL gegen die Liste der verfügbaren Cookies zu vergleichen . Es ist nicht zu schön. Es ist bedauerlich, dass der RFC nicht vorausschauend voraussetzte, dass ein längerer Pfad ein Cookie mit einem kürzeren Pfad vollständig überschreibt (zB: in Ihrem Beispiel würden Sie Cookie erhalten: a = 2nur).
Ich würde mein Bestes tun (lesen: alles, was ich kann), um doppelte Cookie-Namen zu vermeiden. Die meisten Menschen sind diesem Thema nie begegnet - aus gutem Grund. –