注: この Java 配備ガイドでは、Java SE 6 update 10 リリースより前にリリースされた機能について説明します。最新情報については、Java Rich Internet Application の開発および配備を参照してください。

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

詳細情報


Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.