サーブレットの基礎知識

セッション終了処理の考慮点

テンアートニ 中越智哉
2001/6/27

 Webアプリケーションにおけるセッション管理の基本は「セッションの開始・継続・終了」で説明しました。ここでは特に、セッションの終了時に留意すべき内容について説明します。

 簡単に復習すると、サーブレットでクライアントごとに固有の値を保持しておいたり、認証を受けたユーザーにのみアクセスを許可したい場合などには、HttpSessionインターフェイスによるセッション・トラッキングが必要です。

 ところで、ユーザーがWebアプリケーションを利用する場合、必ず特定のページをアクセスしたり、ログイン認証を行って利用を開始することになるため、セッションが開始されないことはありません。しかし、セッションの終了においては、ユーザーが明示的にセッションを終了する操作を行わない場合がある(というより、ほとんどの場合そういった操作は行われない)ことを考慮する必要があります。つまり、ユーザーが自分に必要なサービスの利用が終了すると即座にブラウザを終了させたり、ほかのページにジャンプすることは頻繁にあります。こういった場合、サーブレット側ではセッションが終了せずに残ってしまっているのです。

別のページへジャンプしたり、ブラウザを閉じることによってセッションの終了処理が行われない場合がある

 ですから、アプリケーションの設計において、ログアウトが必ず実行されるという前提で設計を行ってしまうと、不都合が生じることがあります。例えば、セッション開始時にユーザーにデータベース接続を1つ与え、セッション終了時にその接続を解放するというような設計の場合、セッションの終了処理が行われずに、不要なデータベース接続だけがどんどんたまっていく、というようなことも考えられます。

 Webアプリケーションの設計を行う際には、「Webアプリケーションは基本的にログアウトレスだ」ということを考慮したうえで、セッション管理部分を設計していく必要があります。

 もちろん、サーブレットコンテナには、あるセッションが一定時間経過してもアクセスされない場合に、自動でセッションを切断するという機能がありますので、セッション自体が切断されないまま残ってしまうということは防ぐことができます。

「Java Solution FAQ」




Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間