1

我已经搜索了一段时间,无法找到解决方案。Microsoft HTTP客户端库 - CookieContainer将永远不会使用

我目前正在开发一个Windows Phone应用程序(针对7.1)。为了与互联网我使用的NuGet级封装通信:Microsoft.Net.Http

下面的代码是用来与网络服务器进行通信:

CookieContainer container = new CookieContainer(); 

HttpClientHandler handler = new HttpClientHandler(); 
handler.UseCookies = true; 
handler.CookieContainer = container; 
HttpClient client = new HttpClient(handler); 

Uri myUri = new Uri("http://my-server/ajax/login?action=login&name=user&password=passwd"); 

var task = client.GetStringAsync(myUri); 

task.Wait(); 

String result = task.Result; 

不出所料这个GET请求的结果。我也检查过服务器端。登录过程已成功完成,并将有效的JSESSIONID返回给客户端。

为了验证我的问题,我已经创建了一个简单的控制台应用程序完全相同的代码作为上述(复制&从我的WP溶液到一个Cl溶液粘贴(以及对应的NuGetPackage如上所述)。

现在有一个很大的区别 我设置一些断点,查看变量:

在Windows Phone:

? container 
{System.Net.CookieContainer} 
    Capacity: 300 
    Count: 0 
    MaxCookieSize: 4096 
    PerDomainCapacity: 20 

在我的控制台应用程序:

? container 
{System.Net.CookieContainer} 
    Capacity: 300 
    Count: 3 
    MaxCookieSize: 4096 
    PerDomainCapacity: 20 

我真的不知道那里发生了什么...... 有人说可能是Cookies被标记为安全。我已经检查过了,那不是这种情况。由于代码在CLI应用程序上运行的事实确保了我至今的请求已正确完成。

有没有人知道那里发生了什么?

回答

1

我刚刚发现我的问题。也许其他人需要这些信息,所以我发布了解决方案。

我的远程服务器被配置为将此cookie作为httpOnly cookie发送。 由于这个事实,即使CookieContainer对象存在,我的Cookie也不可见。

唯一奇怪的是,如果我的代码(或PCL)在控制台应用程序中使用,Cookie将暴露给CookieContainers公共对象。在WinRT或Windows Phone应用程序中,它们不会公开。 似乎RT &可湿性粉剂更关闭。

更改我的服务器配置以发送Cookie为HttpOnly = false让我看到客户端上的Cookie。