はじめに
Java で Web アプリケーションを学び始めると、
必ず出てくるのが Cookie と Session です。
ですが、多くの人がここでつまずきます。
- Cookie と Session の違いがあいまい
- ログイン処理がなぜ動くのか分からない
- なんとなく使っているが説明できない
原因はとてもシンプルで、
Web が本来どんな仕組みで動いているかを理解できていない
からです。
この記事では、
Java(Servlet)で Cookie と Session をどう管理するのか を、
図を思い浮かべながら理解できるように解説します。
Webはなぜ状態を覚えられないのか
まず大前提として、
Web の通信は 状態を持たない 仕組みです。
つまり、
- リクエスト
- レスポンス
は、それぞれ 毎回独立 しています。
サーバーは
「この人がさっき誰だったか」
を自動では覚えてくれません。
そこで登場するのが、
Cookie と Session です。
CookieとSessionの役割
Cookie と Session は、どちらも
状態を覚えるための仕組み です。
ただし、役割と保存場所がまったく違います。
ここを理解できると、
Web アプリの仕組みが一気に見えてきます。
Cookieの仕組みをイメージで理解する
Cookie は、
ブラウザ側に保存される小さなデータ です。
流れをイメージすると、こうなります。
サーバー → Cookieを渡す
ブラウザ → Cookieを保存
次のリクエスト → Cookieを自動で送信
つまり Cookie は、
毎回のリクエストにくっついて送られるメモ
のようなものです。
Cookieの特徴
Cookie には、次のような特徴があります。
- ブラウザに保存される
- 自動的に送信される
- ユーザー側で見られる可能性がある
そのため、
重要な情報をそのまま入れるのは危険
です。
Java(Servlet)でCookieを扱う方法
Cookieを作成する
Servlet では、次のように Cookie を作ります。
Cookie cookie = new Cookie("userName", "sample");
response.addCookie(cookie);
これで、
ブラウザに Cookie が保存されます。
Cookieを取得する
リクエストから Cookie を取り出します。
Cookie[] cookies = request.getCookies();
配列として取得し、
名前を見て必要な Cookie を探します。
Cookieを削除する
Cookie を削除したい場合は、
有効期限を短くして上書きします。
ここも初心者が混乱しやすいポイントです。
Sessionの仕組みをイメージで理解する
Session は、
サーバー側に保存されるデータ です。
ただし、
サーバーはユーザーを直接識別できません。
そこで使われるのが Session ID です。
Sessionの流れを図で考える
イメージは次の通りです。
ブラウザ → リクエスト
サーバー → Session ID を発行
ブラウザ → Session ID を Cookie として保存
次回以降 → Session ID を送信
重要なのは、
Session ID だけが Cookie に入る
という点です。
Sessionはどこに保存されるのか
Session の中身は、
- サーバーのメモリ
- サーバー側の管理領域
に保存されます。
そのため、
ユーザーから直接見られることはありません。
ここが、
Cookie との大きな違いです。
Java(Servlet)でSessionを扱う方法
Sessionを取得する
Servlet では、次のように Session を取得します。
HttpSession session = request.getSession();
Session がなければ作成され、
あれば既存のものが使われます。
値を保存する
Session に値を保存します。
session.setAttribute("loginUser", user);
ログイン情報を保存するのが、
典型的な使い方です。
値を取得する
保存した値は、次のように取得します。
Object user = session.getAttribute("loginUser");
Sessionを破棄する
ログアウト時などは、
Session を破棄します。
session.invalidate();
これで、
サーバー側の情報は消えます。
CookieとSessionの違いまとめ
| 項目 | Cookie | Session |
|---|---|---|
| 保存場所 | ブラウザ | サーバー |
| 安全性 | 低い | 高い |
| 保存できる量 | 少ない | 比較的多い |
| 主な用途 | 識別情報 | ログイン状態 |
この違いを説明できると、
Web の基礎が分かっている人
として評価されます。
ログイン処理での正しい使い分け
ログイン処理では、
次のような使い分けが基本です。
- Cookie:Session ID
- Session:ログインユーザー情報
ユーザー情報そのものを
Cookie に入れてはいけません。
これは、
セキュリティ事故につながります。
初心者がよくハマる勘違い
Cookieに重要情報を入れてしまう
Cookie は、
ユーザー側で見られる可能性があります。
重要情報は
必ず Session に保存
しましょう。
Sessionがいつ切れるか分からない
Session は、
一定時間アクセスがないと無効になります。
「ずっと残るものではない」
という意識が大切です。
ブラウザを閉じたら全て消えると思っている
Cookie や Session の挙動は、
設定によって変わります。
ここを理解していないと、
予期しない動きになります。
Servletを理解していると強い理由
Cookie と Session の仕組みは、
Servlet を理解していると
とても分かりやすくなります。
これは、
Spring などのフレームワークでも
考え方は同じ です。
Javaが業務で強い理由
Java は、
- 仕組みが明確
- 長く使われている
- 運用を前提に作られている
言語です。
Cookie と Session を正しく扱えることは、
業務システムで通用する力
そのものです。
まずは自己学習で土台を固めよう
Java Web の基礎を
体系的に理解したい人は、
まず
絶対にJavaプログラマーになりたい人へ。
👉 https://amzn.asia/d/3E1CYbv
で、考え方を整理するのがおすすめです。
実務や転職を考えているなら
- Cookie と Session の説明が不安
- ログイン処理を理解したい
- Java プログラマーとして成長したい
そんな人には
サイゼントアカデミー がおすすめです。
👉 https://academy.cyzennt.co.jp
仕組みから丁寧にレビューしてもらえます。
まとめ
Cookie と Session は、
- Web が状態を持たない問題を解決する
- 役割がまったく違う
- 正しく使い分けることが重要
というポイントを理解することが大切です。
この基礎が分かると、
Java Web 開発は一気に楽になります。
ぜひ、
仕組みから理解する学習
を続けていきましょう。

コメント