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。