サーブレットの基礎知識

セッションの開始・継続・終了

テンアートニ 野宗貴史
2001/2/2

 サーブレットにおけるセッション管理を実現するには、HttpSessionを使用しますが、セッションの開始・継続・終了についてのコーディング方法を説明します。一般的なシステムでは、まず初めにログイン認証処理が行われ、次に買い物などの処理を行い、最後にログアウトが行われます。この場合、ログイン認証処理が成功した直後に、セッションの開始となります。次に買い物などを行う場合には、セッションの継続が必要となり、最後にログアウトを行うときが、セッションの終了となります。

 まず、セッションを開始するには、HttpServletRequestのgetSessionメソッドを実行します。このときの引数はtrueにする必要があります(引数の詳細は、後述参照)。

public void doPost(HttpServletRequest request,
                    HttpServletResponse response)
  throws ServletException, IOException {
    HttpSession session = request.getSession(true);

 次に、セッションを継続する場合も、HttpServletRequestのgetSessionメソッドを実行します。このときの引数はfalseにする必要があります(引数の詳細は、後述参照)。

public void doPost(HttpServletRequest request,
                    HttpServletResponse response)
  throws ServletException, IOException {
    HttpSession session = request.getSession(false);

 最後に、セッションを終了する場合は、HttpSessionのinvalidateメソッドを実行します。

  session.invalidate();

 また、セッションに値を格納する場合は、HttpSessionのsetAttributeメソッドを実行します。

  UserInfo userInfo = new UserInfo(...);
  session.setAttribute("USER_INFO", userInfo);

 セッションに格納された値を取得する場合は、HttpSessionのgetAttributeメソッドを実行します。

  UserInfo userInfo = (UserInfo) session.getAttribute("USER_INFO");

 セッションに格納された値を削除する場合は、HttpSessionのremoveAttributeメソッドを実行します。

  session.removeAttribute("USER_INFO");

 以上のように、HttpSessionを利用してセッション管理を行うと、Cookie(SessionID)に関するコーディングは不要となりますので、容易にセッション管理を行うことができます。


■補足説明

HttpServletRequestのgetSessionメソッドの引数について
 getSessionメソッドの返り値はHttpSessionです。このメソッドを実行すると、引数にかかわらず、セッション情報が存在しているかを調べます。セッション情報が存在している場合には、そのセッションを返します。また、存在しない場合の動作は引数により異なります。引数がtrueの場合はセッションを新規に作成して返しますが、引数がfalseの場合はnullを返します。

セッションのタイムアウトについて
 Webアプリケーションの場合は、ユーザーが処理の途中でブラウザを閉じるということもありますので、必ずしもログアウト処理が行われるとは限りません。このような場合は、クライアント側は処理を終了しているのにもかかわらず、サーバ側にはそのクライアントに対するセッション情報が残ってしまいます。このように使用されなくなったセッション情報は、最後に使用されてからある一定時間が経過すると自動的に削除されます。この時間をセッションタイムアウト時間といい、ユーザーが任意に設定することができます。

 

「Java Solution FAQ」




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

注目のテーマ

Java Agile 記事ランキング

本日 月間