セッションとは?【JavaのServletとJSPでの使い方】
目次
1. セッションとは?
セッション (Session) とは、ユーザーごとに一時的な情報をサーバー側に保存する仕組みのことです。
- 「このユーザーが誰か」を特定するための仕組み。
- 一度ログインしたら、その情報(ログイン状態)をページを移動しても維持できます。
- サーバー側に情報が保存されるので、クライアント側のブラウザが閉じても、セッションは残る場合があります。
2. なぜセッションが必要なのか?
- ログイン機能: 一度ログインしたら、ページ移動しても「ログイン状態を維持」するために必要。
- ショッピングカート機能: 複数の商品を選択した際に、「カートの中身」を保持するために必要。
- 個別のユーザー情報の管理: ページをまたいで、**「このユーザーは誰?」**をサーバーが認識するために必要。
3. セッションの仕組み
- ユーザーがWebサイトにアクセスすると、サーバーが「セッションID」を発行します。
- セッションIDはクッキー(Cookie)としてブラウザに送信されます。
- サーバーはセッションIDを使って、そのユーザー専用の情報(ユーザーID、カート情報など)を管理します。
イメージ図
[ブラウザ] ---- セッションID送信 ----> [サーバー][サーバー] --- ユーザー情報を保存 ---> [メモリ/DB]
4. セッションとCookieの違い
| 項目 | セッション | クッキー |
|---|---|---|
| 保存場所 | サーバー側 | クライアント(ブラウザ) |
| データのサイズ | 小さなデータ(IDだけ) | クライアントにデータ全体を保存 |
| 安全性 | 高い(サーバーで管理) | 低い(クライアントで管理) |
| 持続時間 | セッションが切れるまで(一定時間) | ユーザーが削除するまで |
| 代表的な用途 | ログイン情報、ショッピングカート | サイトの言語やテーマの保存 |
5. Java (Servlet & JSP) でのセッションの使い方
1. セッションの開始と取得
サーブレットでセッションを取得する方法です。
HttpSession session = request.getSession();- request.getSession(): セッションがなければ新しいセッションを作成し、セッションがあればそれを取得します。
2. セッションに値を保存する
セッションにデータを追加する方法(ログインしたユーザーの情報をセッションに保存する例)
// ユーザーの名前をセッションに保存する
session.setAttribute("userName", "山田太郎");- setAttribute(key, value): セッションにデータを追加するメソッド
- 例えば、
userNameという名前で、山田太郎というデータがセッションに保存されます。
3. セッションから値を取得する
保存されたデータを別のページやサーブレットから取得する方法です。
// セッションからユーザー名を取得
String userName = (String) session.getAttribute("userName");- getAttribute(key): セッションに保存されたデータをkeyを使って取得します。
4. セッションから値を削除する
ログアウトする際などに使う方法です。
// セッションの "userName" だけを削除する
session.removeAttribute("userName");
</code>- removeAttribute(key): 指定したデータ(key)だけを削除します。
5. セッションを完全に削除する(ログアウトの時)
ログアウト機能では、セッション全体を破棄する必要があります。
// セッションを破棄(全データを削除)
session.invalidate();- invalidate(): セッション全体を削除するメソッド。
- ログアウト時にはこのメソッドを使います。
6. 実際の使い方の例
ログイン機能のセッションの使い方
1. ログイン処理(UserLoginServlet.java)
package controller;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/login")
public class UserLoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
// ログインの成功を仮定
if ("admin".equals(username) && "password".equals(password)) {
HttpSession session = request.getSession();
session.setAttribute("userName", username); // セッションにユーザー情報を保存
response.sendRedirect("home.jsp");
} else {
response.sendRedirect("login.jsp?error=1");
}
}
}2. ログイン後のホーム画面(home.jsp)
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head><title>ホーム画面</title></head>
<body>
<h1>ホーム画面</h1>
<c:if test="${not empty sessionScope.userName}">
<p>ようこそ、${sessionScope.userName}さん!</p>
<a href="logout">ログアウト</a>
</c:if>
<c:if test="${empty sessionScope.userName}">
<p>ログインしていません。</p>
<a href="login.jsp">ログイン</a>
</c:if>
</body>
</html>
3. ログアウト処理(LogoutServlet.java)
@WebServlet("/logout")
public class LogoutServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
session.invalidate(); // セッションを完全に破棄
response.sendRedirect("login.jsp");
}
}7. セッションの注意点
| 注意点 | 説明 |
|---|---|
| セッションの有効期限 | セッションは一定時間が経つと自動で切れます(通常は30分)。サーバーの web.xml で設定可能です。 |
| セッションのサイズに注意 | 大量のデータをセッションに入れるのはNG(DBに保存すべき)。 |
| インスタンス変数を使わない | サーブレットのインスタンス変数は共有されるため、必ずセッションを使いましょう。 |
| ログアウトの処理を忘れない | ログアウト時はsession.invalidate() でセッションを削除する。 |
8. まとめ
| 機能 | 使い方 |
|---|---|
| セッションの開始 | HttpSession session = request.getSession(); |
| データを追加 | session.setAttribute("key", value); |
| データを取得 | String value = (String) session.getAttribute("key"); |
| データの削除 | session.removeAttribute("key"); |
| ログアウト処理 | session.invalidate(); |

2009年那覇でホームレスになるも沖縄の方々に助けられ、2010年からNPOで地域密着で困窮支援。2016-2024年まで株式会社FM那覇代表取締役。沖縄の支援団体情報ポータルサイト「カケハシオキナワ」設立運営。防災士。コンサル・エンジニア。


