1

私はしばらくの間検索しましたが、解決策を見つけることができませんでした。

現在、Windows Phone アプリ (7.1 を対象) を開発しています。インターネットと通信するために、NuGet-Package: Microsoft.Net.Httpを使用しています。

次のコードは、Web サーバーとの通信に使用されます。

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) にコピー & ペースト)。

大きな違いが 1 つあります。変数を表示するためにいくつかのブレークポイントを設定しました。

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

そこで何が起こっているのか本当にわかりません... Cookieが安全であるとマークされている可能性があると誰かが言いました。私はこれをチェックしましたが、そうではありません。コードが CLI アプリケーションで機能するという事実により、これまでのところ要求が正しく行われていることが保証されます。

そこで何が起こっているのかについて、誰かもっと情報がありますか?

4

1 に答える 1

1

私は自分の問題を見つけました。他の誰かがこの情報を必要としているかもしれないので、解決策を投稿しています。

リモート サーバーは、この Cookie を httpOnly Cookie として送信するように構成されていました。この事実により、私の Cookie は CookieContainer オブジェクトにあっても表示されません。

唯一の奇妙な点は、私のコード (または PCL) がコンソール アプリケーションで使用される場合、Cookie が CookieContainers パブリック オブジェクトに公開されることです。WinRT または Windows Phone アプリでは公開されません。RT と WP は閉鎖されているようです。

HttpOnly=false として Cookie を送信するようにサーバーの構成を変更すると、クライアント側で Cookie を確認できます。

于 2013-10-16T07:01:43.950 に答える