HttpClient不在CookieContainer中存储cookie

时间:2013-02-04 05:57:57

标签: c# cookies httpclient

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

由于我无法理解的原因,我在HttpResponseMessage收到的会话Cookie不会自动保存在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容器仍然是空的......为什么?

3 个答案:

答案 0 :(得分:15)

使用这段代码从响应中检索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;
}

答案 1 :(得分:8)

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

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

有关详细信息,请参阅this article

答案 2 :(得分:0)

也许问题在于您的请求网址路径是网站根目录(“ /”),但是Set-Cookie标头指示路径为“ / member”。