14

URLConnectionを介して「完全な」Cookieを送信する適切な方法は何ですか?

私は使用しています:

URL url = new URL(page);  
URLConnection urlConn = url.openConnection(); 

urlConn.setRequestProperty("Cookie", myCookie); 

urlConn.setUseCaches(true); 

urlConn.connect();

myCookieの値はtestCookie=d1lEZk9rSHd3WnpBd2JkWGRhN1RYdz09OkEwQ21pSFJVZzBpVDhhUENaK3ZPV2c9PQです。

パス、ドメイン、および有効期限を一緒に送信する方法はありますか?何らかの方法で値をエンコードする必要がありますか?

4

2 に答える 2

30

この(現在受け入れられている)答えは間違っています-httpクライアントの場合、複数のCookie値にセパレーターを使用する; ため、彼の例では実際に3つのクーキーを送信します。

  • user=mary17
  • domain=airtravelbargains.com
  • path=/autos

サーバーの応答とヘッダーについて話している場合Set-Cookie、答えは正しいでしょうが、そうではありません-urlconnectionは、サーバーに接続しているクライアント用です。

では、あなたが求めた情報についてはDomainどうでしょうかExpiresPath問題は、あなたはその情報を送ることを意図されていないということです。パス、ドメイン、および有効期限は、クライアントへの指示であるため、ブラウザー(またはその他のHTTPクライアント)に送信されることを意図した指示にすぎません。有効なCookieをサーバーに送信することだけを目的としているため、意味がないため、要求した情報を送信する方法はありません。

これは、ブラウザで使用しているHTTPセッションを参照することで確認できます。ブラウザは次のようなものだけを送信します:

Cookie: cookiename=value; anothercookie=othervalue;

本来あるべき姿です。

または、RFC 6265を調べることができます。目次から、Domainヘッダー(ブラウザまたは他のhttpクライアントからサーバーに送信される)ではなく、ヘッダー(ブラウザに送信される)の属性であるExpiresことが直接わかります。PathSet-CookieCookie

于 2014-11-23T21:22:18.187 に答える
9

さて、あなたがクッキーを設定しているだけなら、私はあなたが単に次のようにすることができると思います:

urlConn.setRequestProperty("Cookie", "user=mary17; domain=airtravelbargains.com; path=/autos");

複数のCookieを設定している場合は、addRequestProperty代わりにこの方法を使用できます。

有効期限属性には、必ず次の形式を使用してください:平日、DD-Mon-YY HH:MM:SSGMT。

唯一の有効なタイムゾーンはGMTであり、日付の要素間の区切り文字はダッシュである必要があります。

于 2012-10-06T16:14:57.100 に答える