注: この Java 配備ガイドでは、Java SE 6 update 10 リリースより前にリリースされた機能について説明します。最新情報については、Java Rich Internet Application の開発および配備を参照してください。
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 HashMap<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 HashMap<String, List<String>>();
List<String> values = new List<String>();
values.add(value);
headers.put("Cookie", values);
handler.put(url.toURI(), headers);
}
}
CookieHandler
は、ブラウザまたはシステムの cookie 格納を抽象化したもので、実行するためには追加のセキュリティーアクセス権が必要です。上記のコードはアプリケーションが信頼されている場合にだけ正常に実行されます。