JakartaEE JSPでのセッション管理の実装方法を徹底解説!初心者向け入門ガイド
生徒
「先生、JakartaEEのJSPでセッション管理をするときってどうやって実装するんですか?」
先生
「セッション管理はウェブアプリケーションに欠かせない仕組みだよ。ユーザーがログインしている状態を保持したり、複数ページ間で情報を共有したりするときに使うんだ。」
生徒
「セッションってリクエスト属性と違うんですか?」
先生
「リクエストは一回限りだけど、セッションはブラウザを閉じるまで続くのが特徴だよ。実際にJSPでどう使うかを見ていこうか。」
1. JakartaEE JSPにおけるセッション管理とは?
JakartaEE JSPでのセッション管理は、ユーザーごとの状態をサーバー側で保持する仕組みです。例えばログイン情報やショッピングカートの内容など、複数ページをまたいで保持したいデータを管理することができます。JSPではHttpSessionオブジェクトを通じて簡単にセッションを操作できます。
2. JSPでセッションを開始する基本
JSPでは、デフォルトでセッションが有効になっています。そのため特別な設定をしなくてもsessionオブジェクトを利用することができます。例えばログインしたユーザーの名前をセッションに保存するには次のように記述します。
session.setAttribute("userName", "太郎");
ようこそ、<%= session.getAttribute("userName") %> さん!
このようにセッションに保存した値は、同じユーザーの複数のリクエスト間で保持されます。
3. セッション属性の利用例
実際のアプリケーションでは、ユーザーがログインしたときにセッションへ情報を保存し、別のページでその情報を取り出すことが一般的です。以下はログイン処理のサーブレットとJSPの例です。
String user = request.getParameter("userName");
HttpSession session = request.getSession();
session.setAttribute("loginUser", user);
response.sendRedirect("welcome.jsp");
<h2>ログイン中のユーザー:${sessionScope.loginUser}</h2>
EL式を使うとコードが簡潔になり、ビュー側での可読性も高まります。
4. セッションの有効期限と管理
セッションには有効期限があり、一定時間操作がなければ自動的に破棄されます。デフォルトのタイムアウト時間はサーバー設定によって異なりますが、多くの環境では30分程度です。タイムアウト時間はweb.xmlで設定することができます。
<session-config>
<session-timeout>20</session-timeout>
</session-config>
この設定ではセッションの有効期限を20分に指定しています。適切に管理することで、セキュリティリスクを減らすことができます。
5. セッションを破棄する方法
ユーザーがログアウトするときにはセッションを破棄する必要があります。セッションを破棄するにはinvalidate()メソッドを呼び出します。
session.invalidate();
セッションを破棄することで、セッションに保存されていたデータはすべて削除されます。これによりログアウト処理を安全に実現できます。
6. セッション管理で注意すべきポイント
JakartaEE JSPでセッション管理を行う際には、以下の点に注意しましょう。
- 不必要に大きなデータをセッションに保存しない
- タイムアウト設定を適切に調整する
- ログアウト時にセッションを破棄する
- セッションIDが盗まれないようにセキュリティを強化する
特にセッションIDの管理はセキュリティ上重要です。HTTPS通信を利用し、CookieにHttpOnlyやSecure属性を付与することも有効な対策となります。
7. セッション管理とリクエストスコープの違い
セッションスコープとリクエストスコープは混同しやすい概念です。リクエストスコープは1回のリクエスト内でしかデータを保持できませんが、セッションスコープはユーザーがブラウザを閉じるかタイムアウトするまで有効です。ログイン情報やショッピングカートの内容などはセッションで扱い、一時的な検索結果などはリクエスト属性で扱うのが適切です。