Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - プログラミング » SQL Anywhere データ・アクセス API » SQL Anywhere Web サービス » HTTP セッションの使用

 

管理

Web アプリケーションでは、データベース・サーバ内のアクティブなセッションの使用率を追跡する手段が必要になることがあります。セッション・データを取得するには、NEXT_CONNECTION 関数をアクティブなデータベース接続に対して繰り返し呼び出し、SessionID などのセッション関連のプロパティを確認します。次の SQL コードは、そのための方法を示しています。

CREATE VARIABLE conn_id LONG VARCHAR;
CREATE VARIABLE the_sessionID LONG VARCHAR;
SELECT NEXT_CONNECTION( NULL, NULL ) INTO conn_id;
conn_loop:
LOOP
    IF conn_id IS NULL THEN
        LEAVE conn_loop;
    END IF;
    SELECT CONNECTION_PROPERTY( 'SessionID', conn_id ) 
        INTO the_sessionID;
    IF the_sessionID != '' THEN
        PRINT 'conn_id = %1!, SessionID = %2!', conn_id, the_sessionID;
    ELSE
        PRINT 'conn_id = %1!', conn_id;
    END IF;
    SELECT NEXT_CONNECTION( conn_id, NULL ) INTO conn_id;
END LOOP conn_loop;
PRINT '\n';

データベース・サーバ・メッセージ・ウィンドウには、次のような出力が表示されます。

conn_id = 30
conn_id = 29, SessionID = session_63315442223323
conn_id = 28, SessionID = session_63315442220088
conn_id = 25, SessionID = session_63315441867629

セッションに属する接続を明示的に切断すると、接続が閉じられ、セッションが削除されます。切断される接続が HTTP 要求の処理において現在アクティブになっている場合、その要求は削除対象としてマーク付けされ、要求を終了するキャンセル通知が送信されます。要求が終了すると、セッションは削除され、接続は閉じられます。セッションを削除すると、そのセッションのキューで保留中だったすべての要求が、セッション ID の削除または変更で説明したようにキューに再度追加されます。接続が現在アクティブでない場合は、セッションは削除対象としてマーク付けされ、セッション・タイムアウト・キューの先頭に再度追加されます。セッションと接続は次回のタイムアウト・サイクルで削除されます (通常は 5 秒以内)。削除対象としてマーク付けされたセッションはいずれも、新しい HTTP 要求では使用できません。

データベースを無条件に停止すると、各データベース接続が切断され、そのデータベース・コンテキスト内のすべてのセッションが削除されます。この動作が保証されるのは、セッション・コンテキスト 1 つにつき有効なデータベース接続が 1 つ必要であり、データベース接続は一度に 1 つのセッションにしか関連付ることができないからです。セッションとデータベース接続は、どちらも同じデータベース・コンテキスト内に存在する必要があります。

データベース・コンテキスト内のセッションに関する詳細については、HTTP セッションの作成のセッション・キーの説明を参照してください。