【问题标题】:Why is one cookie missed?为什么少了一块饼干?
【发布时间】:2011-08-04 04:35:18
【问题描述】:

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

谢谢:

第一: 我创建了一个 CookieContainer 和一个 HttpWebRequest 并请求 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,我在容器中得到了两个 cookie 对象。

然后我为下一个 url 解析 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 中是否存在相关差异(一个有路径,另一个有过期日期)? 知道如何传递这两个 cookie 吗?

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

谢谢。

【问题讨论】:

    标签: c# cookies cookiecontainer missing-cookies


    【解决方案1】:

    如果您没有在 cookie 上指定路径,它将默认为请求的路径。因此,如果您在此请求中收到没有路径声明的 cookie:

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

    浏览器只会在/subfolder/ 目录中发送更多请求的cookie。要让浏览器发回所有路径,您需要在设置 cookie 时包含 path=/。

    【讨论】:

    • 谢谢,但是我无权在 cookie 中包含 path=/,因为我正在报废我无权访问的服务器。我会看看我能做什么。还是谢谢你。
    猜你喜欢
    • 2014-11-19
    • 1970-01-01
    • 2017-03-02
    • 2012-03-05
    • 1970-01-01
    • 2015-03-07
    • 2015-06-06
    • 2017-02-03
    • 1970-01-01
    相关资源
    最近更新 更多