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

SQL Anywhere 12.0.1 » SQL Anywhere サーバー プログラミング » HTTP Web サービス » HTTP Web サーバーとしての SQL Anywhere » HTTP Web サーバーでの Web サービスアプリケーションの開発 » HTTP サーバーでの HTTP セッションの管理

 

HTTP セッションの削除またはセッション ID の変更

セッションコンテキスト内でキャッシュされているデータベース接続を明示的に切断すると、セッションが削除されます。この方法によるセッションの削除はキャンセル操作と見なされ、そのセッションキューから解放された要求はすべてキャンセルステータスになります。この操作によって、セッションキューで待ち状態になっている未処理の要求は、すべて確実に終了します。同様に、サーバーまたはデータベースが停止した場合も、データベース接続がすべてキャンセルされます。

セッションを削除するには、sa_set_http_option システムプロシージャーで SessionID オプションを NULL または空の文字列に設定します。

次のコードは、セッションの削除に使用できます。

CALL sa_set_http_option( 'SessionID', null );

HTTP セッションを削除するか SessionID を変更すると、セッションキューで待ち状態になっている保留中の HTTP 要求が解放され、セッションコンテキスト外で実行できるようになります。保留中の要求では、同じデータベース接続は再使用されません。

セッション ID を既存のセッション ID に設定することはできません。SessionID を変更すると、古い SessionID を参照する保留中の要求は解放され、セッションレス要求として実行されます。新しい SessionID を参照する後続の要求では、古い SessionID によってインスタンス化された同じデータベース接続が再使用されます。

HTTP セッションを削除または変更すると、次の状態になります。

  • セッションに属するデータベース接続が取得されたセッションが、現在の要求に継承されているかどうか、または、セッションレス要求によって新しいセッションがインスタンス化されたかどうかによって、動作が異なります。要求がセッションレスとして開始された場合は、セッションの作成または削除操作が即座に行われます。要求がセッションを継承している場合は、セッションの削除や SessionID の変更などのセッションステータスに関する変更は、要求が終了し変更内容がコミットされた後でのみ発生します。この動作の違いによって、1 つのクライアントで同じ SessionID を使用して同時要求を行ったとき、異常事態が発生する可能性があります。このような場合の対処を検討する必要があります。

  • セッションを (保留中のセッションがない) 現在のセッションの SessionID に変更することは、エラーではなく、影響はありません。

  • セッションを別の HTTP 要求によって使用されている SessionID に変更することは、エラーになります。

  • 変更がすでに保留中のときにセッションを変更すると、保留中のセッションが削除され、新しい保留中のセッションが作成されます。保留中のセッションは、要求が正常に終了した場合にのみアクティブ化されます。

  • 保留中のセッションがあるセッションを元の SessionID に戻すと、現在のセッションには変更を加えずに保留中のセッションが削除されます。

 参照