cookie サポート には次の内容が含まれます。
cookie は、クライアント側にデータを格納する 1 つの方法です。cookie は、個人に特化したポータルサイト作成、ユーザ設定の追跡、および Web サイトへのログインで広範に使用されます。Web サイトで cookie を使用している企業顧客の場合、Java Plug-in および Java Web Start で cookie がサポートされていると、クライアント側の Java の配備が容易になります。
cookie サポートを利用すると、Web サーバからの cookie を、Java アプリケーションから当該 Web サーバに返すことができます。これにより、クライアントの状態に関する情報をサーバに提供できます。
cookie には、主にセッション cookie および持続 cookie の 2 種類があります。
セッション cookie はアプレットまたはアプリケーションのセッションの間にメモリに格納されます。セッション cookie はアプレットまたはアプリケーションが終了したときに期限切れになり、自動的に削除されます。通常、これらの cookie は、ユーザ個人を特定しないセッション ID を格納することにより、ユーザがページからページに移動するとき、繰り返しログインする必要がなくなります。セッション cookie は、たとえば消費者が買い物かごに追加した商品を追跡するために、商用 Web サイトにおいて広く使用されています。
持続 cookie は持続的な記憶領域に保管され、アプリケーションが終了しても削除されません。持続 cookie は期限切れになった場合に削除されます。持続 cookie は特定の Web サイトに対するユーザ設定を保つことにより、将来のセッションでそれらの設定を使用することができます。持続 cookie は、個別のユーザを識別するために使用されるので、Web サイトにおいてユーザが、どのようにネットサーフィンをしているのかを分析するために使用されます。これらの cookie は訪問者の人数、特定のページを閲覧するために費やされた時間の平均、Web サイトの全般的なパフォーマンスなどの情報を提供するためにも使用されます。これらの cookie は通常、長期間、場合によっては数年間、ユーザを追跡するように設定されます。
Java Plug-in および Java Web Start は両方の種類の cookie をすべてのプラットフォーム上で扱えるようにサポートします。
Java Plug-in は、ブラウザ自体の cookie ストアを使用して持続的な cookie サポートを提供します。Internet Explorer で実行すると、IE の cookie ストアが使用され、Mozilla で実行すると、Mozilla の cookie ストアが使用されます。それぞれのブラウザが異なる cookie のポリシーを持つために、cookie を扱う際の動作はブラウザの cookie 制御に依存します。たとえば、ブラウザがサードパーティの cookie を拒否するように設定されている場合、このブラウザで Java Plug-in を実行するときには、そのポリシーが適用されます。
Java Web Start は、Internet Explorer の cookie ストアを使用することにより、Windows 上で持続 cookie のサポートを提供し、cookie を扱う際の動作は IE の cookie 制御により決定されます。Linux/Solaris 上では、Java Web Start は独自の cookie ストア実装を使用することにより、持続 cookie のサポートを提供します。
アプリケーションがデフォルトの cookie の処理をオーバーライドするための方法は数種類あります。次にそのうちの 4 つを示します。
void URLConnection.setRequestProperty(String key, String value)
この方法により、アプリケーションは URLConnection
に独自の cookie ヘッダを設定してから接続を確立することができます。
URL url = new URL( "http://java.sun.com/" );
URLConnection conn = url.openConnection();
conn.setRequestProperty("Cookie", "foo=bar");
InputStream is = conn.getInputStream();
.....
接続が確立されたときに、独自の cookie は HTTP/HTTPS 要求ヘッダ内で、サーバに送信されます。
Map<String, List<String>> URLConnection.getHeaderFields()
接続が確立された後に、サーバは HTTP/HTTPS 応答ヘッダ内で cookie を返します。次に説明する方法により、アプリケーションは URLConnection
を介して cookie の値を取得します。
URL url = new URL( "http://java.sun.com/" );
URLConnection conn = url.openConnection();
conn.connect();
.....
Map<String, List<String>> headers = conn.getHeaderFields();
List<String> values = headers.get("Set-Cookie");
String cookieValue = null;
for (Iterator iter = values.iterator(); iter.hasNext(); ) {
String v = values.next();
if (cookieValue == null)
cookieValue = v;
else
cookieValue = cookieValue + ";" + v;
}
接続が確立された後に、サーバは HTTP/HTTPS 応答ヘッダ内で cookie を返します。
Map<String,List<String>> CookieHandler.get(URI uri, Map<String,List<String>> requestHeaders)
この方法によりアプリケーションは、与えられた URL に対する、セッション cookie または持続 cookie を取得できます。
String retrieveCookie(URL url)
{
String cookieValue = null;
CookieHandler handler = CookieHandler.getDefault();
if (handler != null) {
Map<String, List<String>> headers = handler.get(url.toURI(), new Map<String, List<String>>());
List<String> values = headers.get("Cookie");
for (Iterator<String> iter=values.iterator(); iter.hasNext();) {
String v = iter.next();
if (cookieValue == null)
cookieValue = v;
else
cookieValue = cookieValue + ";" + v;
}
}
return cookieValue;
}
CookieHandler
は、ブラウザまたはシステムの cookie 格納を抽象化したもので、実行するためには追加のセキュリティアクセス権が必要です。上記のコードはアプリケーションが信頼されている場合にだけ正常に実行できます。
void CookieHandler.put(URI uri, Map<String,List<String>> responseHeaders)
この方法によりアプリケーションは、与えられた URL に対するセッション cookie または持続 cookie を設定できます。
void setCookie(URL url, String value)
{
CookieHandler handler = CookieHandler.getDefault();
if (handler != null) {
Map<String, List<String>> headers= new Map<String, List<String>>();
List<String> values = new List<String>();
values.add(value);
headers.put("Cookie", values);
handler.put(url.toURI(), headers);
}
}
CookieHandler
は、ブラウザまたはシステムの cookie 格納を抽象化したもので、実行するためには追加のセキュリティアクセス権が必要です。上記のコードはアプリケーションが信頼されている場合にだけ正常に実行できます。