クッキーは、ちょっとした値を保管しておくのには役立ちますが、それ以上のことはできません。複雑な値や大きなデータを保管しておくことには向かないのです。が、アクセスしてきたそれぞれのユーザーごとに何らかの値を保管しておきたいことはよくあります。例えばショッピングカートのようなものなら、カートに入れた商品の情報を保管しておければずいぶんと助かりますね。
こうした「各ユーザーごとに、クッキーよりも複雑で大きなデータを保管しておく」という場合に用いられるのが「
セッション」です。セッションというのは、サーバーとクライアント(ブラウザ)との間で
連続した接続を維持し続ける機能です。このセッションに値を保管しておくことで、クライアントごとにデータを保管し管理することができるようになります。
セッションは、「
HttpSession」というクラスとして用意されています。これは、実はインスタンスを作ったり剃る必要はありません。最初から「
session」という暗黙オブジェクトが用意されており、これを利用することでセッションを操作できるようになっています。
このセッションには、値を保管したり取得したりするためのメソッドが用意されています。
・値を保管するsession.setAttribute( 名前 , 値 );
・値を取得するObject 変数 = session.getAttribute( 名前 );
セッションの値は、
アトリビュート(属性)という形で設定されるようになっているんですね。
setAttributeでアトリビュートを設定し、
getAttributeで指定のアトリビュートを取り出す、というわけです。ただ、この「属性」という考え方は、どうもピンとこない人も多いようです。そこでもっとシンプルに「値を設定したり取り出したりする」という形のメソッドも用意されています。
・値を保管するsession.putValue( 名前 , 値 );
・値を取得するObject 変数 = session.getValue( 名前 );
この2種類のメソッドは、実は「
全く同じもの」です。
setAttributeと
putValueは全く同じ働きをしますし、
getAttributeと
getValueも同様です。setAttributeで設定した値をgetValueで取り出すことももちろんできますし、その逆もしかりです。ですから、どちらでも好きな方を利用すればよいでしょう。
このセッションは、アクセスを開始した時にスタートし、アクセスしている間、ずっと維持し続けられます。一定時間以上アクセスをしなかったり、ブラウザを終了したりするとセッションも終了し、セッションに保管されていた情報もすべて失われます。
セッションの開始時間や景観時間、またセッションの終了などに関するメソッドも
HttpSessionに用意されています。以下に整理しておきましょう。
・セッションを開始した時刻を得るlong 変数 = session.getCreationTime();
・最終アクセス時間を得るlong 変数 = session.getLastAccessedTime();
・セッションを無効にするsession.invalidate();
getCreationTimeと
getLastAccessedTimeは、PCの基準となる日時(1970年1月1日午前零時)からの
経過ミリ秒数で得られます。また、
invalidateはセッションを無効にするため、以後、
sessionのメソッドなどはすべて使えなくなりますので注意してください。