2008-11-15 7 views
6

Ich habe Probleme mit HttpWebRequest/HttpWebResponse und Cookies/CookieContainer/CookieCollection. Die Sache ist, wenn der Webserver einen "Pfad" im Cookie nicht sendet/verwendet, Cookie.Path gleich dem Pfadteil der Anfrage-URI statt "/" oder in meiner Anwendung leer ist. Daher funktionieren diese Cookies nicht für die gesamte Domäne, was sie tatsächlich in richtigen Webbrowsern tut. Irgendwelche Ideen, wie man dieses Problem löst?Probleme mit HttpWebRequest/HttpWebResponse und Cookies

Vielen Dank im Voraus

Antwort

4

Ah, ich verstehe was du meinst. Im Allgemeinen, welche Browser wirklich tun, nehmen Sie den Ordner, der das Dokument als Pfad enthält; für '/login.php' wäre das '/', so dass es effektiv über die gesamte Domain funktioniert. "/potato/login.php" wäre auf "/ potato /" beschränkt; alles mit schleppenden Pfad-Info-Teilen (zB ./login.php/ ') würde nicht funktionieren.

In diesem Fall könnte die Netscape-Spezifikation als falsch oder zumindest irreführend angesehen werden, wenn behauptet wird, dass der Pfad standardmäßig auf den aktuellen Dokumentpfad verweist ... je nachdem, wie genau Sie dort "Pfad" lesen. Das Browserverhalten ist jedoch bis zur ursprünglichen Netscape-Version konsistent. Netscape waren nie gut, dass beim Schreiben Spezifikationen ...

Wenn .NET die HttpWebRequest wirklich CookieContainer.Path zum gesamten Pfad des aktuellen Dokuments in Verzug ist, ich habe einen Fehler gegen sie einreichen würde.

Leider ist das reale Verhalten derzeit nicht wirklich in einem Standarddokument beschrieben ... es gibt RFC 2965, die den Weg richtig macht, aber einige andere Änderungen macht nicht repräsentativ für das reale Browserverhalten, also das ist auch nicht absolut zuverlässig. :-(

0

So funktionieren Cookies. ‚Richtigen‘ Web-Browser tun genau das gleiche, wie ursprünglich in der alten Netscape Cookies doc angegeben: http://cgi.netscape.com/newsref/std/cookie_spec.html

Web-Anwendungen müssen effektiv immer setzen einen ‚Pfad‘ (oft ‚/‘).

+0

Danke, Bobince. Ich sehe, aber das ist ein wenig seltsam für mich, weil diese Website, über die ich sprach, die keinen "Pfad" setzt, irgendwie scheint immer noch über die gesamte Domäne in Internet Explorer und Firefox zumindest funktionieren. Irgendwelche Ideen? – James

1

Scheint wie ich kann nicht weiter mit der Standard-Cookie-Handler gehen, so dass ich verärgert war und ich tat es auf die harte Art. Haha. So Parsing Response.Headers ["Set-Cookie"] selbst ist meine Lösung Nicht meine bevorzugte, aber es funktioniert. Und ich beseitigte das Problem einfach mit dem falschen Komma mit regulären Ausdrücken.

Wenn ich hier Punkte vergeben könnte, würde ich Ihnen einige von ihnen geben, Bobince, weil Sie gaben Ich würde auch abstimmen, wenn ich könnte (brauche eine höhere Rep.-Punktzahl), aber da dieses Verhalten wahrscheinlich ein Fehler ist, wie du erwähnt hast, werde ich das als Antwort akzeptieren.

Danke. :)

+0

Vielen Dank, dass Sie den Fehler entdeckt haben und ihn googeln konnten! :-) – bobince