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

SAP Sybase SQL Anywhere 16.0 » SQL Anywhere サーバ プログラミング » HTTP Web サービス » HTTP Web サーバとしての SQL Anywhere » HTTP Web サーバで Web サービスアプリケーションを開発する方法 » HTTP サーバでの HTTP セッションの管理

 

HTTP セッションの管理

HTTP 要求によって作成されたセッションはすぐにインスタンス化されるので、このセッションコンテキストを必要とする後続の HTTP 要求は作成されたセッションによってキューに追加されます。

この例では、sa_set_http_option プロシージャを使用してセッションがサーバで作成されると、ローカルホストクライアントは、データベース dbname で実行され、サービス session_service を実行する、指定されたセッション ID (session_63315422814117) のセッションに、次の URL を指定してアクセスできます。

http://localhost/dbname/session_service?sessionid=session_63315422814117

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 要求の処理において現在アクティブになっている場合、その要求は削除対象としてマーク付けされ、要求を終了するキャンセル通知が送信されます。要求が終了すると、セッションは削除され、接続は閉じられます。セッションを削除すると、そのセッションのキューで保留中だったすべての要求が、キューに再度追加されます。

接続が現在アクティブでない場合は、セッションは削除対象としてマーク付けされ、セッションタイムアウトキューの先頭に再度追加されます。セッションと接続は次回のタイムアウトサイクルで削除されます (通常は 5 秒以内)。削除対象としてマーク付けされたセッションはいずれも、新しい HTTP 要求では使用できません。

データベースが停止すると、すべてのセッションが失われます。

 参照