BEA ホーム | 製品 | dev2dev | support | askBEA |
![]() |
![]() |
|
![]() |
e-docs > WebLogic Server > Web アプリケーションのアセンブルとコンフィグレーション > Web アプリケーションにおけるセッションとセッション永続性の使用 |
Web アプリケーションのアセンブルとコンフィグレーション
|
Web アプリケーションにおけるセッションとセッション永続性の使用
この章では、セッションとセッションの永続性を設定する方法について説明します。
セッション トラッキングを使用すると、複数のサーブレットか HTML ページにわたって、本来はステートレスであるユーザの状況を追跡できます。セッションの定義は、ある一定期間中に同じクライアントから出される一連の関連性のあるブラウザ リクエストです。セッション トラッキングは、ショッピング カート アプリケーションのように、全体として何らかの意味を持つ一連のブラウザ リクエスト (これらのリクエストをページとみなす) を結合します。
WebLogic Server は、デフォルトによってセッション トラッキングを処理するよう設定されています。セッション トラッキングを使用する際にプロパティを設定する必要はありません。ただし、WebLogic Server がどのようにセッションを管理するかをコンフィグレーションすることは、最高のパフォーマンスを実現するためにアプリケーションをチューニングするときの重要な鍵となります。チューニングの内容は、以下のような要素によって異なります。
WebLogic Server のセッション トラッキングは、WebLogic 固有のデプロイメント記述子である weblogic.xml のプロパティでコンフィグレーションします。WebLogic 固有のデプロイメント記述子の編集手順については、手順 4: セッション パラメータの定義を参照してください。
セッション属性の全リストについては、jsp-descriptorを参照してください。
WebLogic Server 7.0 では、一部のロード バランサでセッションを維持できなくなる セッション ID フォーマットの変更が行われました。
新しいサーバ起動フラグ -Dweblogic.servlet.useExtendedSessionFormat=true は、ロードバランシング アプリケーションでセッションの維持に必要な情報を保持します。 この拡張されたセッション ID フォーマットは、URL 書き換えがアクティブで、かつ起動フラグが true に設定されている場合には URL に組み込まれます。
HTTP セッションが期限切れになるまでの間隔を指定できます。セッションが期限切れになると、そのセッションに格納されたデータはすべて破棄されます。この間隔は、次のとおり web.xml または weblogic.xml に設定できます。
WebLogic Server は、クライアント ブラウザによってサポートされる場合、クッキーを使用してセッション管理を行います。
WebLogic Server がセッション トラッキングに使用するクッキーは、デフォルトによって一時的なものとして設定されているため、セッションより長く存続することはありません。ユーザがブラウザを終了すると、クッキーは失われ、セッション有効期間が終了したものと見なされます。この動作はセッションの用途の基本であり、このようにセッションを使用することをお勧めします。
クッキーのセッション トラッキング属性は、WebLogic 固有のデプロイメント記述子である weblogic.xml でコンフィグレーションできます。セッションとクッキーに関連する属性の全リストについては、jsp-descriptorを参照してください。
WebLogic 固有のデプロイメント記述子の編集手順については、手順 4: セッション パラメータの定義を参照してください。
長期間存続するクライアントサイド ユーザ データの場合、WebLogic Server アプリケーションは HTTP サーブレット API を介してブラウザに独自のクッキーを作成および設定し、HTTP セッションに関連付けられたクッキーは使用しようとはしません。WebLogic Server アプリケーションがクッキーを使用して特定のマシンのユーザの自動ログインを行う場合、新しいクッキーの存続期間を長く設定します。クッキーは、クライアント マシンだけから送ることができます。WebLogic Server アプリケーションは、そのユーザが複数の場所からアクセスする必要がある場合、サーバにデータを格納する必要があります。
ブラウザ クッキーの存続期間を直接セッションの長さに関連付けることはできません。クッキーがそれに関連付けられているセッションより早く期限切れになった場合、そのセッションは切り離されてしまいます。セッションがそれに関連付けられているクッキーより早く期限切れになった場合、サーブレットはそのセッションを見つけることができません。この場合、新しいセッションは request.getSession(true) メソッドが呼び出されるときに割り当てられます。セッションの使用は一時的なものに限定する必要があります。
クッキーの最大存続時間は、weblogic.xml デプロイメント記述子のセッション記述子にある CookieMaxAgeSecs パラメータで設定できます。詳細については、手順 4: セッション パラメータの定義を参照してください。
ユーザ認証情報は、ユーザのセッション データと、Web アプリケーションの対象となるサーバまたは仮想ホストのコンテキストの両方に格納されます。ユーザのログアウトに多く使われる session.invalidate() メソッドでは、ユーザの現在のセッションのみが無効になり、ユーザの認証情報は有効なまま、サーバまたは仮想ホストのコンテキストに格納されます。サーバまたは仮想ホストが 1 つの Web アプリケーションだけをホストしている場合は、session.invalidate() メソッドを実行するとユーザはログアウトされます。
複数の Web アプリケーションで認証を使用するときには、複数の Java メソッドと戦略を使用できます。詳細については、『HTTP サーブレット プログラマーズ ガイド』の「複数のアプリケーションに対する単一のサインオンの実装」(を参照してください。
セッションの永続性を使用して、HTTP セッション オブジェクトにデータを永続的に格納し、WebLogic Server のクラスタ全体のフェイルオーバとロード バランシングを有効にします。アプリケーションが HTTP セッション オブジェクトにデータを格納するとき、データをシリアライズ可能にする必要があります。
最初の 4 つについてはここで説明します。インメモリ レプリケーションについては、『WebLogic Server クラスタ ユーザーズガイド』の「HTTP セッション ステートのレプリケーションについて」(を参照してください。
ファイル、JDBC、クッキーベース、およびメモリ (単一サーバ、非レプリケート) のセッション永続性には、共通のプロパティがいくつか存在します。以下の節で説明するとおり、各永続性メソッドはそれぞれ独自の属性セットを持っています。
この節では、ファイル システム、メモリ (単一サーバ、非レプリケート)、JDBC、およびクッキーベースの永続性に共通の属性について説明します。メモリ内に保持されるセッションの数は、WebLogic 固有のデプロイメント記述子である weblogic.xml の <session-descriptor> 要素で次のプロパティを設定してコンフィグレーションできます。これらのプロパティは、セッション永続性を使用している場合にだけ適用できます。
メモリ ベース、単一サーバ、非レプリケート永続ストレージの使い方
メモリ ベース、単一サーバ、非レプリケート永続ストレージを使用するには、WebLogic 固有のデプロイメント記述子である weblogic.xml の <session-descriptor> 要素にある PersistentStoreType プロパティを memory に設定します。メモリ ベースのストレージを使用する場合、すべてのセッション情報はメモリに格納され、WebLogic Server を終了して再起動すると失われます。
注意: WebLogic Server を実行するときに十分なヒープ サイズを割り当てないと、負荷がかかったときにサーバのメモリが足りなくなることがあります。
ファイルベースの永続ストレージをセッション用にコンフィグレーションするには、次の手順に従います。
この属性値を明示的に設定しなかった場合、WebLogic Server によって一時ディレクトリが自動的に作成されます。
ファイルベース永続性をクラスタで使用する場合、この属性を、クラスタ内のすべてのサーバがアクセスできる共有ディレクトリに明示的に設定しなければなりません。このディレクトリは手動で作成する必要があります。
データベースの永続ストレージとしての使い方 (JDBC 永続性)
JDBC の永続性は、この目的のために提供されたスキーマを使ってデータベース テーブルにセッション データを格納します。JDBC ドライバを備えたデータベースはすべて使用できます。データベース アクセスは、接続プールを使ってコンフィグレーションします。
JDBC ベースの永続ストレージをセッション用にコンフィグレーションするには、次の手順に従います。
データベース接続プールの設定の詳細については、「JDBC 接続の管理」を参照してください。
例 : Oracle VARCHAR2(100)。このカラムは主キーの一部として使用する (wl_id カラムの説明を参照)。 |
|
整数カラム。例 : Oracle Integer。セッションが無効になるまでのクライアント リクエストの間隔の秒数。時間値が負の場合は、セッションがタイムアウトしないことを示す。 |
Oracle DBMS を使用している場合、次の SQL 文を使って wl_servlet_sessions テーブルを作成できます。
create table wl_servlet_sessions
( wl_id VARCHAR2(100) NOT NULL,
wl_context_path VARCHAR2(100) NOT NULL,
wl_is_new CHAR(1),
wl_create_time NUMBER(20),
wl_is_valid CHAR(1),
wl_session_values LONG RAW,
wl_access_time NUMBER(20),
wl_max_inactive_interval INTEGER,
PRIMARY KEY (wl_id, wl_context_path) );
SqlServer2000 を使用している場合は、次の SQL 文を使って wl_servlet_sessions テーブルを作成します。
create table wl_servlet_sessions
( wl_id VARCHAR2(100) NOT NULL,
wl_context_path VARCHAR2(100) NOT NULL,
wl_is_new VARCHAR(1),
wl_create_time DeCIMAL,
wl_is_valid VARCHAR(1),
wl_session_values IMAGE,
wl_access_time DECIMAL,
wl_max_inactive_interval INTEGER,
PRIMARY KEY (wl_id, wl_context_path) );
前述の SQL 文のいずれかを、使用する DBMS に合わせて変更します。
注意: ユーザは、JDBConnectionTimeoutSecs 属性が設定されたセッション データのロードに失敗するまで、JDBC セッション永続性が接続プールからの JDBC 接続を待つ最大の期間をコンフィグレーションできます。詳細については、JDBConnectionTimeoutSecsを参照してください。
クッキーベースのセッション永続性は、ユーザのブラウザのクッキーにすべてのセッション データを格納することで、セッション永続性のステートレスなソリューションを提供します。クッキーベースのセッション永続性が最も役に立つのは、セッションに大量のデータを格納する必要がないときです。クッキーベースのセッション永続性は、クラスタ フェイルオーバ ロジックが必要ないので、WebLogic Server のインストール環境をより簡単に管理できます。セッションが格納されるのはブラウザ内であって、サーバ上ではありません。WebLogic Server の起動と停止は、セッションを失わずに行うことができます。
クッキーベースのセッション永続性には、次に示すいくつかの制限事項があります。
クッキーベースのセッション永続性を設定するには、次の手順に従います。
状況によっては、ブラウザまたは無線デバイスがクッキーを受け入れないこともあります。この場合、クッキーによるセッション トラッキングを行うことができません。URL 書き換えを使用すると、ブラウザがクッキーを受け入れないことを WebLogic Server が検出したときに、こうした状況を自動的に置き換えることができます。URL 書き換えでは、セッション ID を Web ページのハイパーリンクにエンコードし、サーブレットはそれらをブラウザに送り返します。ユーザが以後これらのリンクをクリックすると、WebLogic Server は URL アドレスからその ID を抽出し、サーブレットが getSession() メソッドを呼び出すと適切な HttpSession を見つけ出します。
WebLogic 固有のデプロイメント記述子である weblogic.xml の <session-descriptor> 要素に URLRewritingEnabled 属性を設定することで、URL 書き換えを有効にします (この属性のデフォルト値は、true です)。URLRewritingEnabledを参照してください。
URL 書き換えをサポートするためにどのように URL をコードで処理するかについては、いくつかのガイドラインがあります。
out.println("<a href=¥"/myshop/catalog.jsp¥">catalog</a>");
if (session.isNew())
response.sendRedirect (response.encodeRedirectUrl(welcomeURL));
URL 書き換えと Wireless Access Protocol (WAP)
WAP アプリケーションを作成する場合、WAP プロトコルはクッキーをサポートしていないため、URL を書き換える必要があります。また、一部の WAP デバイスでは、URL の長さが 128 文字 (パラメータも含む) に制限されます。これにより、URL 書き換えによって転送できるデータ サイズが制限されます。パラメータ用の領域を大きくするために、WebLogic Server でランダムに生成されるセッション ID のサイズを制限できます。IDLengthを参照してください。
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |