public class CookieManager extends CookieHandler
CookieHandler
の具象実装を提供し、Cookie のストレージと Cookie の受け入れ/拒否に関するポリシーとを分離します。CookieManager は、ストレージを管理する CookieStore
と、Cookie の受け入れ/拒否に関するポリシー決定を行う CookiePolicy
オブジェクトとを使って初期化されます。
java.net パッケージにおける HTTP Cookie 管理は、次のようになっています。
use CookieHandler <------- HttpURLConnection ^ | impl | use CookieManager -------> CookiePolicy | use |--------> HttpCookie | ^ | | use | use | |--------> CookieStore ^ | impl | Internal in-memory implementation
- CookieHandler が Cookie 管理の中核となる。ユーザーは CookieHandler.setDefault を呼び出すことで、使用すべき CookieHanlder の具象実装を設定できる。
- CookiePolicy.shouldAccept が CookieManager.put によって呼び出され、ある Cookie を受け入れて Cookie ストア内に格納すべきかどうかが確認される。ユーザーは、3 つの定義済み CookiePolicy、つまり ACCEPT_ALL、ACCEPT_NONE、ACCEPT_ORIGINAL_SERVER、のいずれかを使用することもできるし、ユーザー独自の CookiePolicy 実装を定義し、CookieManager にそれを使用するよう指示することもできる。
- CookieStore は、受け入れられたすべての HTTP Cookie の格納場所となる。作成時に指定されなかった場合、CookieManager インスタンスは内部のインメモリー実装を使用する。また、ユーザーが別のものを実装し、CookieManager にそれを使用するよう指示することもできる。
- 現時点では、CookieManager によって使用されているのは、CookieStore.add(URI, HttpCookie) と CookieStore.get(URI) だけである。それ以外は完全を期すためのものであるが、NetscapeCookieStore など、より高度な CookieStore 実装では必要になる可能性がある。
ユーザーが独自の HTTP Cookie 管理動作を組み込む方法としては、さまざまなものが考えられます。次に例を示します。
- CookieHandler.setDefault を使って新しい
CookieHandler
実装を設定する。- CookieManager をデフォルトの
CookieHandler
実装にするが、ユーザー独自のCookieStore
とCookiePolicy
を実装し、デフォルトの CookieManager にそれらを使用するよう指示する。// this should be done at the beginning of an HTTP session CookieHandler.setDefault(new CookieManager(new MyCookieStore(), new MyCookiePolicy()));- CookieManager をデフォルトの
CookieHandler
実装にするが、カスタマイズされたCookiePolicy
を使用する。// this should be done at the beginning of an HTTP session CookieHandler.setDefault(new CookieManager()); // this can be done at any point of an HTTP session ((CookieManager)CookieHandler.getDefault()).setCookiePolicy(new MyCookiePolicy());
この実装は、RFC 2965 のセクション 3.3 に準拠しています。
CookiePolicy
コンストラクタと説明 |
---|
CookieManager()
新しい Cookie マネージャーを作成します。
|
CookieManager(CookieStore store, CookiePolicy cookiePolicy)
指定された Cookie ストアと Cookie ポリシーを使って新しい Cookie マネージャーを作成します。
|
修飾子と型 | メソッドと説明 |
---|---|
Map<String,List<String>> |
get(URI uri, Map<String,List<String>> requestHeaders)
要求ヘッダー内に指定された URI の Cookie キャッシュから適用可能なすべての Cookie を取得します。
|
CookieStore |
getCookieStore()
現在の Cookie ストアを取得するためのもの。
|
void |
put(URI uri, Map<String,List<String>> responseHeaders)
応答ヘッダー内に存在する Set-Cookie2 という名前の応答ヘッダーフィールドなど、適用可能なすべての Cookie を Cookie キャッシュ内に設定します。
|
void |
setCookiePolicy(CookiePolicy cookiePolicy)
この Cookie マネージャーの Cookie ポリシーを設定するためのもの。
|
getDefault, setDefault
public CookieManager()
このコンストラクタは、デフォルトの Cookie ストアと受け入れポリシーを使って新しい Cookie マネージャーを作成します。その効果は CookieManager(null, null) と同じです。
public CookieManager(CookieStore store, CookiePolicy cookiePolicy)
store
- Cookie マネージャーが使用すべき CookieStore。null の場合、Cookie マネージャーはデフォルトのインメモリー CookieStore 実装を使用します。cookiePolicy
- Cookie マネージャーがポリシーコールバックとして使用すべき CookiePolicy インスタンス。null の場合、ACCEPT_ORIGINAL_SERVER が使用されます。public void setCookiePolicy(CookiePolicy cookiePolicy)
CookieManager のインスタンスはデフォルトで、Cookie ポリシー ACCEPT_ORIGINAL_SERVER を持ちます。ユーザーはいつでもこのメソッドを呼び出して別の Cookie ポリシーを設定できます。
cookiePolicy
- Cookie ポリシー。null も可能ですが、現在の Cookie ポリシーに対する効果はありません。public CookieStore getCookieStore()
public Map<String,List<String>> get(URI uri, Map<String,List<String>> requestHeaders) throws IOException
CookieHandler
引数として渡される URI
は、Cookie の使用目的を指定します。たとえば、スキームには Cookie が http または https のどちらで送信されるのかや、Javascript などの別のコンテキストで使用されるのかを反映するべきです。ホスト部分には Cookie の転送先または Javascript の場合はそれらのオリジンを反映するべきです。
どれを返すかを決定する際に、URI
および Cookie の属性とセキュリティ設定を考慮することは、実装に任されています。
HTTP プロトコルの実装者は、Cookie の選択に関係するすべての要求ヘッダーが追加されてから要求が送信されるまでの間に、必ずこのメソッドが呼び出されるようにしてください。
get
、クラス: CookieHandler
uri
- Cookie の使用目的を表す URI
requestHeaders
- 現在の要求ヘッダーを表す、要求ヘッダーフィールド名からフィールド値のリストへのマップIOException
- 入出力エラーが発生した場合CookieHandler.put(URI, Map)
public void put(URI uri, Map<String,List<String>> responseHeaders) throws IOException
CookieHandler
put
、クラス: CookieHandler
uri
- Cookie の生成元の URI
responseHeaders
- 返された応答ヘッダーフィールドを表す、フィールド名からフィールド値のリストへの不変のマップIOException
- 入出力エラーが発生した場合CookieHandler.get(URI, Map)
バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.