Jakarta サーブレットで学ぶセッション管理とクッキー操作の基礎を徹底解説!Jakarta EE初心者向け入門
生徒
「先生、Jakarta サーブレットでユーザーのログイン状態を覚えておく方法ってありますか?」
先生
「もちろんあるよ。Jakarta EEのサーブレットでは、セッション管理やクッキーを使うことでユーザーごとの状態を保持できるんだ。」
生徒
「セッションとクッキーってよく聞くけど、違いが分かりません。」
先生
「それじゃあ、Jakarta サーブレットでのセッション管理とクッキー操作の基本を順番に説明していこう。」
1. Jakarta サーブレットでのセッション管理とは
Jakarta EEのWebアプリケーションでは、HTTPが本来ステートレス(状態を持たない)であるため、ユーザーがログインしたかどうかやカートの中身といった情報を保持する仕組みが必要です。その代表的な仕組みがセッション管理です。
Jakarta サーブレットでは、HttpSessionという仕組みを利用してユーザーごとのデータを保存します。セッションはサーバー側に保持され、ユーザーにはセッションIDが割り当てられます。このIDを元にサーバーは同じユーザーを識別することができます。
HttpSession session = request.getSession();
session.setAttribute("userName", "Taro");
このように記述すると、セッションにuserNameという情報が保存され、後から取り出すことができます。
2. セッションの利用例
例えばログイン機能を作るとき、ユーザー名や認証状態をセッションに保存すれば、リクエストごとに再度ログインを確認する必要がありません。ログイン後の画面ではセッションに保存したユーザー名を取り出して表示することができます。
String user = (String) session.getAttribute("userName");
こうすることで、ユーザー固有のデータを簡単に管理できます。
3. セッションの有効期限と管理
Jakarta サーブレットのセッションには有効期限があります。通常は30分ですが、アプリケーションの要件に合わせて変更できます。
session.setMaxInactiveInterval(600); // 600秒 = 10分
これにより、セッションの有効期限を制御できます。また、ログアウト処理ではセッションを無効化するのが一般的です。
session.invalidate();
これでセッションに保存されている情報が削除され、ユーザーはログアウト状態になります。
4. クッキーとは何か
クッキーは、ユーザーのブラウザに小さなデータを保存する仕組みです。Jakarta サーブレットでは、セッション管理に内部的にクッキーが使われていますが、開発者が直接クッキーを操作することもできます。
クッキーはユーザーの端末に保存され、次回以降のリクエストでも送信されます。そのため、ユーザーの好みや言語設定、ログインの保持などに利用されます。
5. Jakarta サーブレットでのクッキー操作
Jakarta サーブレットでクッキーを利用するにはCookieクラスを使います。例えばユーザー名を保存するクッキーを作成するには次のようにします。
Cookie cookie = new Cookie("userName", "Taro");
cookie.setMaxAge(60 * 60 * 24); // 1日間有効
response.addCookie(cookie);
保存されたクッキーは、次回のリクエストでサーバーに送信されます。サーバー側でクッキーを読み取るときは次のようにします。
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie c : cookies) {
if ("userName".equals(c.getName())) {
String userName = c.getValue();
}
}
}
これで、クライアント側に保存されたデータをサーバーが再利用できます。
6. セッションとクッキーの違い
セッションとクッキーは似ている部分もありますが、大きな違いがあります。セッションはサーバー側にデータを保持し、クライアントには識別用のIDだけが渡されます。一方、クッキーはデータ自体がユーザーのブラウザに保存され、リクエストごとに送信されます。
そのためセキュリティ上の重要な情報はセッションに保存し、ユーザー設定のように軽量で公開しても問題ない情報はクッキーに保存するといった使い分けが行われます。
7. Jakarta EEアプリケーションでの実践的な活用
Jakarta EEの実際のアプリケーション開発では、セッションとクッキーを組み合わせることで便利な機能を提供できます。例えばショッピングサイトでは、ログイン情報はセッションで管理し、カートの中身や閲覧履歴などはクッキーを利用して保持することが考えられます。
さらに、Jakarta サーブレットを利用することで、セッションやクッキーを効率的に操作し、ユーザー体験を向上させることができます。