22

我正在使用VS2010++ (来自.NET 4.0)。System.Net.HttpNuget

由于我无法理解的原因,我收到的会话 cookieHttpResponseMessage不会自动保存在HttpClient CookieContainer. 这是我的代码的样子:

CookieContainer cookies = new CookieContainer();
HttpClientHandler handler = new HttpClientHandler();
handler.CookieContainer = cookies;
HttpClient client = new HttpClient(handler);

Uri site = new Uri("https://www.mywebsite.com");
var response1 = client.SendAsync(new HttpRequestMessage(HttpMethod.Get,site)).Result;

我可以在响应标头中看到以下内容:

Set-Cookie: JSESSIONID=FC8110E434C2C6DAB78B4E335024A639; Path=/member; Secure

但是我的 cookie 容器仍然是空的……为什么?

4

4 回答 4

19

使用这段代码从响应中检索 cookie:

/// <summary>
/// Read web cookies
/// </summary>
public static CookieContainer ReadCookies(this HttpResponseMessage response)
{
    var pageUri = response.RequestMessage.RequestUri;

    var cookieContainer = new CookieContainer();
    IEnumerable<string> cookies;
    if (response.Headers.TryGetValues("set-cookie", out cookies))
    {
        foreach (var c in cookies)
        {
            cookieContainer.SetCookies(pageUri, c);
        }
    }

    return cookieContainer;
}
于 2014-08-03T19:01:31.110 回答
11

我想问题是您的 cookie 是安全的。问题是,CookieContainer 不会在后续 HTTP 请求中将安全 cookie 发送回服务器。这可能是一个错误,或者它背后有一些原因。

一种解决方法是手动将 cookie 添加到 CookieContainer。这样,cookie 将在 HTTP 请求标头中发送回,因为当您将 cookie 发送回服务器时不会定义安全。

有关更多信息,请参阅本文

于 2013-02-04T06:08:33.187 回答
0

问题可能是您的请求 URL 路径指向网站的根目录(“/”),但您的 Set-Cookie 标头指示路径为“/member”。

于 2018-09-18T18:04:53.273 回答
0

由于路径的大小写不同,我遇到了 cookie 的问题。我登录到 /mysite/login,并为 mysite 设置了 cookie,但随后重定向到 /MySite,HttpClient 突然丢弃了所有 cookie!当我将地址更改为 /MySite/login 时,一切正常。

于 2022-01-11T12:45:31.847 回答