2008-11-15 76 views
6

我遇到了HttpWebRequest/HttpWebResponse和cookies/CookieContainer/CookieCollection的問題。 問題是,如果Web服務器不在Cookie中發送/使用「路徑」,則Cookie.Path等於請求URI的路徑部分而不是「/」或在我的應用程序中爲空。 因此,這些cookie不適用於整個域,它實際上在正確的Web瀏覽器中執行。 任何想法如何解決這個問題?HttpWebRequest/HttpWebResponse和cookies的問題

在此先感謝

回答

4

啊,我明白你的意思了。一般瀏覽器究竟是做的是以包含文檔的文件夾爲路徑;因爲'/login.php'是'/',所以它可以在整個域中有效地工作。 '/potato/login.php'將被限制爲'/ potato /';跟蹤路徑信息部分的任何內容(例如'/login.php/')都不起作用。

在這種情況下,Netscape規範可能被認爲是錯誤的或者至少在聲稱路徑默認爲當前文檔路徑時產生誤導......取決於您在那裏讀取「路徑」的方式。然而,瀏覽器行爲與原始Netscape版本一致。 Netscape從來沒有擅長編寫規格......

如果.NET的HttpWebRequest實際上是默認CookieContainer.Path到當前文檔的整個路徑,我會提交一個反對它的錯誤。

不幸的是,現實世界中的行爲實際上目前並沒有在標準文檔中描述過......有RFC 2965,它確實能夠找到正確的路徑,但會做出其他一些不能代表真實世界瀏覽器行爲的變化,所以那也不完全可靠。 :-(

0

這就是餅乾的工作方式。 「適當的」網絡瀏覽器做同樣的,因爲在古代網景的cookies文檔最初指定:http://cgi.netscape.com/newsref/std/cookie_spec.html

Web應用程序必須有效始終設置一個「路徑」(常「/」)。

+0

謝謝你,bobince。 我明白了,但這對我來說有點奇怪,因爲我在談論哪個網站沒有設置「路徑」,至少在Internet Explorer和Firefox中似乎仍然可以在整個域中工作。 任何想法? – James 2008-11-15 18:05:07

1

似乎我不能再進一步使用默認的cookie處理程序,所以我很惱火,而且我做到了這一點。哈哈。所以解析response.Headers [「Set-Cookie」]我自己就是我的解決方案。不是我的首選,但它的工作原理。我簡單地消除了用正則表達式分割錯誤的問題。

如果我可以在這裏給出點,我會給你一些,bobince,因爲你給如果可以的話,我也會投票贊成(需要更高的代表分數),但是由於這種行爲可能是一個錯誤,正如你所提到的,我會接受這個答案。

謝謝。

+0

感謝您發現錯誤並使其易用! :-) – bobince 2008-11-17 13:45:45