2010-11-22 24 views
5

ヘッダー "Set-Cookie"を取得しようとしているか、またはCookieコンテナーにアクセスしようとしていますが、Set-Cookieヘッダーは使用できません。 クッキーは応答ヘッダーにありますが、クライアント要求オブジェクトには存在しません。 は私がHttpWebRequestとSet-Cookieヘッダーの応答が解析されない(WP7)

bool httpResult = WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp); 

を使用してClientHttpスタックを登録しています。ここ応答です:

HTTP/1.1 200 OK 
Content-Type: application/xml; charset=utf-8 
Connection: keep-alive 
Status: 200 
X-Powered-By: Phusion Passenger (mod_rails/mod_rack) 3.0.0.pre4 
ETag: "39030a9c5a45a24e485e4d2fb06c6389" 
Client-Version: 312, 105, 0, 0 
X-Runtime: 44 
Content-Length: 1232 
Set-Cookie: _CWFServer_session=[This is the session data]; path=/; HttpOnly 
Cache-Control: private, max-age=0, must-revalidate 
Server: nginx/0.7.67 + Phusion Passenger 3.0.0.pre4 (mod_rails/mod_rack) 

<?xml version="1.0" encoding="UTF-8"?> 
<user> 
... 
</user> 

私のコールバックコードのようなものが含まれます。

var webRequest = (HttpWebRequest)result.AsyncState; 
raw = webRequest.EndGetResponse(result) as HttpWebResponse; 
foreach (Cookie c in webRequest.CookieContainer.GetCookies(webRequest.RequestUri)) 
{ 
    Console.WriteLine("Cookie['" + c.Name + "']: " + c.Value); 
} 

を私はまた、ヘッダを見ていたが試してみましたSet-Cookieヘッダーが応答にも存在しません。

何が問題なのですか?

+0

"Set-Cookie"ヘッダーがWP7のHttpWebResponsesでも見付かりません。 – Curyous

答えて

-1

ヘッダーコレクションを直接編集する必要があります。このような何か:

request.Headers["Set-Cookie"] = "name=value"; 

request.BeginGetResponse(myCallback, request); 
+0

リクエストの前にヘッダを設定することを意味するのであれば、無駄にしようとしました。 –

6

新しいCookieContainerを渡して、明示的に試してみてください:

CookieContainer container = new CookieContainer(); 
container.Add(new Uri("http://yoursite"), new Cookie("name", "value")); 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://yoursite"); 
request.CookieContainer = container; 
request.BeginGetResponse(new AsyncCallback(GetData), request); 
+0

私を助けることができますか? GetData()の機能は何ですか? (最後の行に) –

+0

'GetData'はこの場合はダミー関数です。あなた自身のコールバックを作成することができます。 –

0

は、クッキーHttpOnlyのですか?そうであれば、あなたはそれを見ることができませんが、2回目のリクエストで同じCookieContainerを使用すると、プログラムはそれを見ることができなくても、リクエストにはクッキーが含まれます。あなたがHttpOnlyのCookieを受けている

2

:セキュリティ上の理由から

Set-Cookie: _CWFServer_session=[This is the session data]; path=/; HttpOnly 

を、これらのクッキーは、コードからアクセスすることはできませんが、あなたはまだHttpWebRequestのにあなたの次の呼び出しでそれらを使用することができます。これに関する詳細:Reading HttpOnly Cookies from Headers of HttpWebResponse in Windows Phone

WP7.1では、私はまた、HttpOnly以外のCookieを読むことに問題がありました。私は、HttpWebRequestの応答がキャッシュから来た場合、それらが利用できないことを知りました。乱数を持つクエリはユニーク作ることはキャッシュの問題を解決:

// The Request 
Random random = new Random(); 
// UniqueQuery is used to defeat the cache system that destroys the cookie. 
_uniqueQuery = "http://my-site.somewhere?someparameters=XXX" 
     + ";test="+ random.Next(); 

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(_uniqueQuery); 
request.BeginGetResponse(Response_Completed, request); 

あなたが応答を取得したら、あなたはレスポンスヘッダからクッキーを取得することができます

void Response_Completed(IAsyncResult result) 
{ 
    HttpWebRequest request = (HttpWebRequest)result.AsyncState; 
    HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result); 
    String header = response.Headers["Set-Cookie"]; 

私はCookieContainerを得ることができたことはありません.GetCookies()メソッドを動作させます。