セッション管理


 


セッションとは

 

セッションという概念はいろんなレベルで定義される。一番低い階層では、TCPIP、データリンク層などの通信プロトコルでのセッションである。これらは各層のピア間でのデータ転送の開始や終了にかかわる一連の過程を言う。例えばダイヤルアップのデータリンク層のPPPセッションは、皆さんがインターネットに電話回線などを介してプロバイダと接続してから終了するまでの間はそのセッションが維持される。TCPのセッションはクライアントがサーバとの間に所定の受け付けポート番号でTCP接続を開始してTCPパケットの一連の転送を行い、それが終了したらTCP接続を開放するが、それまでの期間TCPセッションが維持されたことになる。

 

反対にビジネスの階層で考えれば、ビジネスのためのオブジェクト群にあるクライアントのオブジェクトが参加してからそれが開放されるまでの期間がそのクライアントとのセッションが張られた期間だと言えよう。具体的には、ある顧客がネットワークを介してオンライン・バンクに登録を始めたときから、そのオンライン・バンクのデータベースからそのクライアントのデータ(データベースの用語では、継続性(Persistence)オブジェクトと呼ぶ)がすべて削除されるまではその顧客とのセッションが維持されていると考えられる。

 

しからばサーブレットのレベルでのセッションとは何であろうか?あるクライアントがそのオンライン・バンクのシステムに預金残高確認のためにアクセスを開始してからそのアクセスを終了するまでの期間であろうか?一般にはクライアントは下図のように一連の画面をたどっていく。しかしながらクライアントは画面を表示させたままで長時間席を外したり、逆にサーバからの応答が到着するまえに更新や元のページに戻ったり、別のサイトに移ってしまったり意図しない行動をとる。場合によってはネットワークの障害もありえよう。

 


従ってセッションの終了の判断には、タイムアウト、状態管理やネットワークの障害なども配慮しなければならない。タイムアウトはHttpSessionインターフェイスに用意されている。ネットワーク障害は、検出したオブジェクトがスローしたものが受け取れるようにするのが好ましい。

 

セッション管理のために用意されているAPIは特定のユーザが継続してこのサイトにアクセスしていることを確認する手段を提供はするが、実際の業務アプリケーションでのユーザのオブジェクトがどの状態にあるかという状態及びその遷移の管理はソフトウエア開発者の責任である。これの情報はセッションの属性(Attribute)オブジェクトあるいは外部の管理オブジェクトに持たせることになる。

 

セッションを管理する場合注意すべき点として、さらにこのサーブレットのインスタンスが分散可能(Distributable)として複数のバーチャルホストに分散して配置される場合である。(SingleThreadModelを実装し、このサーブレットのインスタンスが複数生成されている場合はHttpSessionオブジェクトはひとつのコンテナ上で管理されるため大丈夫である)。この場合は、クライアントはいつも特定のエンジン上のサーブレットのインスタンスにアクセスする訳ではないので、セッション管理にはそのための常駐サーブレット(シングルトンとかヘルパーとか)、あるいはデータベースなどが必要となる。

 

 

前節     目次     次節