画面間の共有データを管理する−sessionオブジェクト−
「セッション」とは、1人のユーザーがあるアプリケーションにアクセスしてから切断——サイトを立ち去るまでの「一連の期間」をいいます。sessionはこのセッション単位で持続すべきデータを管理するためのオブジェクトです。
sessionオブジェクトは、先述のクッキーのように永続的に情報を保持するというものではありませんが、ユーザーがアプリケーションを使用するに際して、ページ間で共有すべき情報を管理する場合に利用することができます。旧来のPerl+CGIでは、こうしたページ間のやりとりにはクエリ情報やクッキーを用いるしかありませんでしたが、セッションを用いることで、こうしたデータ授受の手続きを飛躍的に簡素化することが可能になります。
なお、sessionオブジェクトは、@pageディレクティブのsession属性がfalseである場合には使用することができませんので、注意してください。session属性はデフォルトでtrueです。
セッション情報の設定・参照
以下の例では、1度目のアクセスでセッション情報にフラグ(flag)を登録しておくことで、2度目以降のアクセスを拒否します。例えば、アンケートの登録フォームなどで重複登録を防ぐ簡易な方法として用いることができるでしょう。
繰り返しますが、セッションは永続的に保持される性質のものではないので、いったんブラウザを閉じてしまったら無効となるため注意が必要です。
<%@ page contentType="text/html;charset=Shift_JIS" %> <% if(session.getAttribute("flag")!=null){ out.print("!!Alerm!! すでにアクセス済みです!"); out.close(); } session.setAttribute("flag","TRUE"); %> <html> <head> <title>セッションの活用(sessionオブジェクト)</title> </head> <body> 最初のアクセス時のみ表示されます。 </body> </html>
getAttributeメソッドは指定されたセッション情報(属性)を取得します。ここではセッション情報"flag"がnullでない場合には2度目以降のアクセスと見なし、警告メッセージを表示後、処理を終了します。
setAttributeメソッドは指定されたキーと値のセットで、新規にセッション情報を登録します。
sessionオブジェクトのそのほかのメソッド
以下では、上でご紹介したgetAttribute、setAttributeメソッドのほか、sessionオブジェクトに用意されている主なメソッドを挙げておくことにします。
メソッド | 概要 |
---|---|
getAttributeNames() | すべてのセッション属性名を取得 |
getCreationTime() | セッションの生成時刻を取得 |
getId() | セッションを一意に識別するIDを取得 |
getLastAccessedTime() | セッションへの最終アクセス時刻を取得 |
getMaxInactiveInterval() | セッションのタイムアウト時間を取得 |
invalidate() | セッションを破棄 |
isNew() | 新しく生成されたセッションかどうか |
removeAttribute(name) | 指定されたセッション属性(name)を削除 |
setMaxInactiveInterval(interval) | セッションのタイムアウトをinterval秒に設定 |
sessionオブジェクトはセッション情報を操作するためのメソッドを提供します。また、セッションに関する情報(タイムアウト時間やセッションIDなど)も、sessionオブジェクトを介して取得することが可能です。
今回はここまでです。次回は、アプリケーション共通のデータをつかさどる「applicationオブジェクト」から解説します。
Copyright © ITmedia, Inc. All Rights Reserved.