cookie サポート


cookie サポート には次の内容が含まれます。

はじめに

cookie は、クライアント側にデータを格納する 1 つの方法です。cookie は、個人に特化したポータルサイト作成、ユーザ設定の追跡、および Web サイトへのログインで広範に使用されます。Web サイトで cookie を使用している企業顧客の場合、Java Plug-in および Java Web Start で cookie がサポートされていると、クライアント側の Java の配備が容易になります。

cookie サポートを利用すると、Web サーバからの cookie を、Java アプリケーションから当該 Web サーバに返すことができます。これにより、クライアントの状態に関する情報をサーバに提供できます。

Java Plug-in と Java Web Start での cookie サポート

cookie には、主にセッション cookie および持続 cookie の 2 種類があります。

セッション cookie

セッション cookie はアプレットまたはアプリケーションのセッションの間にメモリに格納されます。セッション cookie はアプレットまたはアプリケーションが終了したときに期限切れになり、自動的に削除されます。通常、これらの cookie は、ユーザ個人を特定しないセッション ID を格納することにより、ユーザがページからページに移動するとき、繰り返しログインする必要がなくなります。セッション cookie は、たとえば消費者が買い物かごに追加した商品を追跡するために、商用 Web サイトにおいて広く使用されています。

持続 cookie

持続 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 へのアクセス

アプリケーションがデフォルトの 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 格納を抽象化したもので、実行するためには追加のセキュリティアクセス権が必要です。上記のコードはアプリケーションが信頼されている場合にだけ正常に実行できます。

詳細情報