11 Stimmen

RESTful-Cookie-Pfad schlägt im IE ohne nachgestellten Schrägstrich fehl

Ich wurde gebeten, einen Abschnitt mit Registerkarten auf Seiten zu erstellen, die RESTful-URLs ohne einen abschließenden Schrägstrich (.NET MVC) haben, zum Beispiel http://myhost/books/the-amber-spyglass

Damit die Registerkarten ein bisschen benutzerfreundlicher sind, möchte ich, dass sie sich merken, welche Registerkarte auf jeder Seite geöffnet war, wenn der Benutzer sich bewegt, so dass, wenn sie zu einem Buch zurückkehren, auf dem sie vorher waren, dieselbe Registerkarte geöffnet bleibt. Dies wird erreicht, indem ein Cookie mit dem Namen "tab" gesetzt wird, wobei der Wert auf die tabid und der Pfad auf die Seite, auf der sie sich befinden, gesetzt wird (so dass es keine Auswirkungen auf die Tabs auf anderen Seiten hat). So weit, so einfach, könnte man meinen, und es funktioniert auch ganz gut.

Geben Sie Internet Explorer ein.

Im IE stellt sich heraus, dass ein Cookie mit dem Pfad /books/the-amber-spyglass NICHT mit der obigen URL übereinstimmt und folglich nicht richtig gesetzt wird. Wenn ich einen abschließenden Schrägstrich hinzufüge, so dass der Pfad stattdessen /books/the-amber-spyglass/ lautet, funktioniert es gut - aber ich kann unser URL-Schema nicht ändern, und selbst wenn ich es könnte, ist "the-amber-spyglass" eine Ressource und kein Ordner.

Hat jemand einen Lösungsvorschlag für dieses sicherlich sehr häufige Problem?

Vielen Dank im Voraus,

JS

9voto

EricLaw Punkte 55641

Ver http://blogs.msdn.com/ieinternals/archive/2009/08/20/WinINET-IE-Cookie-Internals-FAQ.aspx

Aufgrund eines obskuren Fehlers in der zugrunde liegenden WinINET InternetGetCookie Implementierung gibt die IE-Datei document.cookie kein Cookie zurück, wenn es mit einem Pfad-Attribut, das einen Dateinamen enthält.

Wenn zum Beispiel eine Seite ein Cookie setzt auf sich selbst setzt, etwa so:

Set-Cookie: HTTPSet-PathCookie=PASS;path=/check.htm

das Cookie wird mit HTTP gesendet Anfragen gesendet, erscheint aber nicht in der document.cookie-Sammlung.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X