セッションの管理
セッションとは、特定の期間に及ぶ特定のクライアントから特定のアプリケーションへの一連の要求を表します。InterSystems IRIS® データ・プラットフォームは、セッションの追跡を自動的に提供します。CSP ベースの Web アプリケーション内で、%CSP.SessionOpens in a new tab のインスタンスである %session オブジェクトを調べることで、現在のセッションについての情報にアクセスできます。
アプリケーション間での認証セッションやデータの共有の詳細は、"認証の共有方法" を参照してください。"セッションの終了" も参照してください。
セッションの作成
セッションは、HTTP クライアントが Web アプリケーションに最初の要求を行うと開始されます。その後、InterSystems IRIS サーバは以下を実行します。
-
新しいセッション ID 番号を作成します。
-
必要に応じてライセンスのチェックを実行します。
-
%session オブジェクト (永続) を作成します。
-
セッション・イベント・クラスの OnStartSession() メソッドを呼び出します (存在する場合)。
-
セッション期間中に HTTP クライアントから後続の要求を追跡するためのセッション Cookie を作成します。クライアント・ブラウザで Cookie を無効にしている場合、InterSystems IRIS はセッションを追跡するために自動的に URL 書き換え (各 URL に特殊な値を挿入する) を使用します。
基本プロパティ
セッションの最初の要求で、%session オブジェクトの NewSession プロパティは、1 に設定されます。後続のすべての要求では、このプロパティは 0 に設定されます。
If (%session.NewSession = 1) {
// this is a new session
}
%session オブジェクトの SessionId プロパティには、セッションの一意の識別子が含まれます。
セッション・データの管理
%session オブジェクトは、Cookie や URL パラメータを使用することなくセッション全体でアプリケーション固有のデータを保存するための簡単な方法を提供します。特に、このオブジェクトの Data プロパティは、コードで使用するための多次元配列プロパティです。例えば、以下の一連のキーと値のペアを保存するとします。
キー | 値 |
---|---|
product | "widgets" |
quantity | 100 |
unitofmeasure | "cases" |
このためには、以下のように Data プロパティに値を保存します。
set %session.Data("product")="widgets"
set %session.Data("quantity")=100
set %session.Data("unitofmeasure")="cases"
同様に、おそらくアプリケーションの異なるページで、以下のように値を取得できます。
set productodisplay=$GET(%session.Data("product"))
set quantityodisplay=$GET(%session.Data("quantity"))
set uomtodisplay=$GET(%session.Data("unitofmeasure"))
この例では、$GET を使用して、特定の添え字が定義されていないときにエラーを防止していることに注意してください。そのようなエラーを防止するには、$GET (または $DATA) を使用するのがベスト・プラクティスです。
また、この手法ではリテラル・データ (オブジェクト参照ではなく) のみを格納でき、配列内の各値は文字列長の制限を下回る必要があることにも注意してください。
セッション・データの削除
Data プロパティからデータを削除するには、以下のように ObjectScript Kill コマンドを使用します。
Kill %session.Data("MyData")
セッション処理のカスタマイズ (イベント・クラス)
さまざまなセッション・イベントが発生したときの動作をカスタマイズするには、以下の操作を実行します。
-
セッション・イベント・クラスを定義します。これは、%CSP.SessionEventsOpens in a new tab のサブクラスである必要があります。
-
そのクラスで、コールバックを実装して、セッションの開始時、タイムアウト時、またはその他のイベントの発生時のアプリケーションの動作をカスタマイズします。
コールバック・メソッドには以下のようなものがあります。
-
OnStartSession() — セッションの開始時の動作を制御します。
-
OnSessionEnd() — セッションの終了時の動作を制御します。すべてのセッションの終了時に呼び出されます。
-
OnTimeout() — セッションのタイムアウトの発生時の動作を制御します。タイムアウトの場合にのみ呼び出されます。
-
OnApplicationChange() — セッション内でユーザがあるアプリケーションから別のアプリケーションに移動したときの動作を制御します (そのような場合は、セッション・タイムアウト値を更新できます)。
詳細は、"%CSP.SessionEventsOpens in a new tab" を参照してください。
-
-
このセッション・イベント・クラスを使用するよう Web アプリケーションを構成します。
または、アプリケーション・コード内で、%session オブジェクトの EventClass プロパティを設定することで、セッション・イベント・クラスをプログラムによって指定します。
コンテキストの保持
既定では、ある要求から次の要求まで CSP サーバによって保持される処理コンテキストのみが、%session オブジェクト内に保持されます。CSP サーバは、要求間ですべての処理コンテキスト変数、インスタンス化されたオブジェクト、データベース・ロック、開いているデバイスを保持するメカニズムを提供します。これはコンテキスト保持モードと呼ばれます。%session オブジェクトの Preserve プロパティの値を設定することで、いつでも CSP アプリケーション内でコンテキスト保持をオンまたはオフにできます。あるプロセスを 1 つのセッションに結び付けると、スケーラビリティが失われるため、このオプションを使用することは非常にまれであることに注意してください。