我已经搜索了一段时间,但无法找到解决方案。
我目前正在开发一款Windows Phone应用程序(针对7.1)。为了与互联网通信,我使用的是NuGet-Package: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应用程序上运行,因此确保我到目前为止请求已正确完成。
有没有人了解更多关于那里发生了什么的信息?
答案 0 :(得分:1)
我刚刚发现了我的问题。也许其他人需要这些信息,所以我发布了解决方案。
我的远程服务器已配置为将此cookie作为httpOnly cookie发送。 由于这个事实,我的cookie在CookieContainer对象中是不可见的,即使它们在那里。
唯一奇怪的是,如果我的代码(或PCL)在控制台应用程序中使用,cookie将暴露给CookieContainers公共对象。在WinRT或Windows Phone应用程序中,它们不会公开。 似乎RT& WP更加封闭。
更改我的服务器配置以发送cookie为HttpOnly = false让我在客户端看到cookie。