|
Q:Java アプレットがサーバプロセスに対して URLConnections を開くたびに、サーバとの新しいセッションが生成されます。アプレットはなぜホストブラウザからのクッキーを使用しないのでしょうか? A: Java 1.4.1 Update 1 for Mac OS X 10.2 以前は、Java プラグイン(1.3.1 と 1.4.1)は、それが組み込まれている Web ブラウザとクッキーを共有しませんでした。このため、アプレットの HTTP 接続とブラウザの HTTP 接続は別々のセッションになり、いくつかの Web アプリケーションでは問題となる場合があります。しかし、ブラウザのクッキーをアプレットに強制することによって、この問題を解決できます。これにはコードを変更する必要がありますが、ブラウザや Mac OS X Java(1.3.1 と 1.4.1)のバージョンを問わず信頼できます。 注意: この問題は、Mac OS X 10.3 以上での Java 1.4 のすべてのリリースも含めて、Java 1.4.1 Update 1 for Mac OS X 10.2 の Safari においては存在しません。この Q&A は、Java 1.3 を使い続ける、Safari 以外のブラウザをサポートしようと考えているデベロッパの方のみが対象になります。Mac OS X 10.2 で Java 1.4 を必要としているデベロッパの方は、単にユーザに、「ソフトウェアアップデート」を通じて無償の Java 1.4.1 Update 1 をダウンロードするように要請するだけで構いません。 リスト 1 は、この処理を開始するのに必要な HTML コードを示しています。APPLET タグはすべて JavaScript を使って書かれ、ブラウザのクッキーは、Document.cookie JavaScript プロパティを使ってアプレットに PARAM として書かれます。この単純な HTML と JavaScript は、JSP やサーブレット、またはその他の動的なメカニズムに簡単に挿入できます。 リスト 1. アプレットへのブラウザクッキーの送信
<HTML>
<BODY>
<SCRIPT LANGUAGE="JavaScript"><!--
// カット&ペーストを行う場合は、次の writeln コードから改行を削除する
document.writeln("<APPLET codebase=\".\"
code=\"CookieCommune.class\"
name=\"CookieCommune\" >");
document.writeln("<PARAM name=\"browserCookie\"
value=\"" + document.cookie + "\">");
document.writeln("</APPLET>");
--></SCRIPT>
</BODY>
</HTML>
この処理の 2 つめの部分はアプレット内で行うものです。"Cookie" リクエストプロパティを設定することによって、クッキーのパラメータがフェッチされ、アプレットが作成する必要のある以降のすべての HTTP 接続で使われます。リスト 2 は、このコードがどのように見えるかを示しています。 リスト 2. アプレット内部でのブラウザクッキーの使用
import java.net.*;
public class CookieCommune extends java.applet.Applet {
private URL serverURL;
public void init() {
try {
serverURL = new URL("http://mystatefulserver.com/talk.cgi");
} catch (MalformedURLException e)
super.init();
}
public void start() {
try {
// クッキーの共有:アプレットのパラメータからブラウザクッキーを取得
URLConnection conn = serverURL.openConnection();
// ブラウザクッキーを URLConnection にアタッチ
conn.setRequestProperty)"Cookie", getParameter("browserCookie"));
} catch (java.io.IOException e) {}
// .... クッキーにとって使いやすい新しいアプレット接続を使用
}
}
この結果、(問題が初めて認識されることの多い)ブラウザ表示の更新があった場合でも、アプレットをホストしているブラウザと同じクッキー情報がアプレットによって毎回使用されるようになります。ここに示した解決策は、さまざまなサーバアプリケーション、および Mac OS X 10.2 上で Java 1.3.1 または Java 1.4.1 を使用してアプレットを実行する任意のブラウザに適用できます。 ドキュメントの改訂履歴| 日付 | メモ |
|---|
| 2004-10-12 | 1.4.1 Update 1(Jaguar 用)以降における問題の解決策を記述。 | | 2003-09-11 | 新規ドキュメント |
掲載日: 2004-10-12
|