セッション ID は、新しい SessionID 値を指定した sa_set_http_option システム・プロシージャを呼び出すことで、別の値に設定し直すことができます。セッション ID の変更は、古いセッションを削除して新しいセッションを作成することに相当しますが、現在のデータベース接続を再利用するので、ステータス情報は失われません。SessionID に NULL (または空の文字列) を設定すると、そのセッションが削除されます。SessionID に既存するセッションの ID を設定することはできません (セッション自身のセッション ID は設定できますが、その場合は何も起こりません)。既存するセッションのセッション ID を SessionID として設定しようとすると、エラー「HTTP オプション 'SessionID' の設定が無効です。SQLCODE=-939」が発生します。
サーバは、同じセッション・コンテキストを指定する複数の HTTP 要求を集中的に受信すると、そうした要求をセッション・キューに追加 (直列化) します。SessionID が 1 つ (または複数の) 要求によって変更または削除された場合、セッション・キューにある保留中の要求はすべて、独立した HTTP 要求としてキューに再度追加されます。各 HTTP 要求は、該当セッションが存在しないので、セッションを取得できません。セッションを取得できなかった HTTP 要求は、デフォルトでセッションレス動作になり、新しいデータベース接続を作成します。Web アプリケーションは、SessionID または SessionCreateTime 接続プロパティの文字列値が空でないかどうかを確認することで、要求がセッション・コンテキスト内で動作しているかどうかを確認できます。当然のことながら、Web アプリケーションは、使用しているアプリケーション固有の変数やテンポラリ・テーブルのステータスを確認できます。次に例を示します。
IF VAREXISTS( 'state' ) = 0 THEN // first invocation by this connection CREATE VARIABLE state LONG VARCHAR; END IF; |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |