HttpClient不在CookieContainer中存储cookie

use*_*596 20 c# cookies httpclient

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

由于我无法理解的原因,我收到的会话cookie HttpResponseMessage不会自动保存在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;
Run Code Online (Sandbox Code Playgroud)

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

Set-Cookie: JSESSIONID=FC8110E434C2C6DAB78B4E335024A639; Path=/member; Secure
Run Code Online (Sandbox Code Playgroud)

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

Sal*_*lar 17

使用这段代码从响应中检索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;
}
Run Code Online (Sandbox Code Playgroud)

  • 这只会设置第一个 cookie。`SetCookies(Uri, String)` 方法只应调用一次,所有 cookie 值以逗号分隔:/sf/ask/2306968541/ (2认同)

Sae*_*ati 8

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

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

有关更多信息,请参阅此文章.

  • @ user2038596 - 安全cookie仅通过HTTPS等安全通道发送.有关详细信息,请参阅[RFC6265§4.1.2.5](http://tools.ietf.org/html/rfc6265#section-4.1.2.5). (3认同)