为什么错过一个cookie?

时间:2011-04-12 19:53:09

标签: c# cookies cookiecontainer missing-cookies

我正在废弃一个重定向结果的网页:我首先访问page1,然后通过http-equiv="refresh"重定向到page2。我正在废弃page2。第2页上的内容基于一些cookie第1页集。我看到page1返回2个cookie,但是当我请求第2页(发送相同的CookieContainer时,一个cookie丢失了。我的代码出了什么问题?

谢谢你:

首先: 我创建了CookieContainerHttpWebRequest并请求了page1。

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(eQuery);
req.AllowAutoRedirect = true; // but it doesn't autoredirects the meta-refresh
req.CookieContainer = cookiesContainer;

这是我通过访问page1

得到的结果

HTTP/1.1 200 OK
Date: Tue, 12 Apr 2011 19:14:06 GMT
Server: (...)
Set-Cookie: NAME1=VALUE1; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: NAME2=VALUE2; expires=Wed, 13-Apr-2011 19:14:06 GMT
Content-Length: 174
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
(...)

到目前为止一切都很好,我得到两个饼干,我在容器中有两个cookie对象。

然后我为下一个网址解析meta http-equiv的“内容”值。并使用类似的代码并使用相同的容器请求它。但只发送一个cookie。这是HTTP发送的:

GET DETECTED_URL_IN_HTTP_EQUIV_REFRESH HTTP/1.1
User-Agent: (...)
Host: example.com
Cookie: NAME1=VALUE1

如您所见,Cookie NAME2缺失。为什么会这样?是两个cookie中的相关差异(一个有路径,另一个有到期日)? 知道我怎么能通过这两个饼干?

PS:我无法访问page1,因此我无法设置Cookie的路径或到期时间。我正在废弃那些页面。

谢谢。

1 个答案:

答案 0 :(得分:2)

如果您未在Cookie上指定路径,则默认为其请求的路径。因此,如果您在此请求中收到了一个没有路径声明的cookie:

http://contoso.com/subfolder/test.aspx

浏览器只会在/subfolder/目录中发回该cookie以获取更多请求。要让浏览器将其发回给所有路径,您需要在设置Cookie时包含path=/