4 Stimmen

ASP.NET kann kommagetrennte Cookies nicht korrekt verarbeiten

Nach Angaben von das RFC Die einzelnen Cookies im HTTP-Header "Cookie" können sowohl durch Kommas als auch durch Semikolons getrennt werden. ASP.NET wertet die Kommas jedoch nicht korrekt aus - es zählt das Komma nicht als Trennzeichen, sondern betrachtet es als Teil des Wertes.

Zum Beispiel Wenn ein Client den Header Cookie: a=b, c=d dann sieht die ASP.NET-Anwendung nur ein Cookie mit dem Namen "a" und dem Wert "b, c=d".

In einem Sonderfall passiert das Gleiche, wenn der Client mehrere Cookie-Header (einen für jedes Cookie) sendet, anstatt alle Cookies in einem Header zusammenzufassen. Aus der HTTP-Perspektive ist dies völlig gültig, und in einem solchen Fall sollte der effektive Wert des Headers die Verkettung der Werte aller seiner Instanzen sein, die durch Kommas getrennt sind.

Kennt jemand eine Umgehung (oder vielleicht eine Lösung?) für dieses Problem? Ich muss das unbedingt hinbekommen, denn ich habe keine Kontrolle über den Client.

P.S. Es ist eine Ironie des Schicksals, dass laut dieses Thema Das Verhalten des in .NET integrierten HTTP-Clients (auch bekannt als HttpWebRequest) ist genau das Gegenteil und verursacht ebenfalls Probleme :-)

4voto

Julian Reschke Punkte 37371

Sowohl RFC 2109 als auch RFC 2965 beschreiben bekanntermaßen nicht die Realität.

Werfen Sie einen Blick auf draft-ietf-httpstate-cookie das ein Arbeitsprodukt der neuen IETF-Arbeitsgruppe httpstate ist.

3voto

Keltex Punkte 25852

Die von Ihnen verlinkte Version ist veraltet. Diese HTTP-Zustandsmanagement-Mechanismus ist das neueste und beste Dokument, in dem Semikolons vorgeschrieben sind. Es besagt, dass Kommas aus Gründen der zukünftigen Kompatibilität akzeptiert werden sollten, aber dies ist nicht erforderlich:

Hinweis: Aus Gründen der Abwärtskompatibilität ist das Trennzeichen im Cookie-Header überall ein Semikolon (;). Ein Server SOLLTE auch das Komma (,) als Trennzeichen zwischen Cookie-Werten aus Gründen der zukünftigen Kompatibilität akzeptieren.

0voto

G-Wiz Punkte 7279

Ich glaube, die einfachste Lösung, um das gewünschte Verhalten zu erhalten (unabhängig von der Korrektheit der Standards) wäre ein HttpModule zu erstellen, die diese Informationen aus dem HttpContext.Request.Headers korrekt analysieren und korrigierte Informationen in HttpContext.Request.Cookies platzieren würde.

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