0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

セッションとクッキーの違いを整理してみた

Last updated at Posted at 2025-09-19

Webアプリ開発で頻出する「セッション」と「クッキー」
本記事ではその違いを整理します。


クッキーとは?

クッキーは ブラウザ(クライアント側)に保存される小さなデータ です。
サーバーがレスポンスヘッダで送信し、次回以降のリクエスト時に自動で送信されます。

特徴

  • 保存場所:ユーザーのPC / ブラウザ
  • 有効期限を設定できる(短期〜長期)
  • 主に「状態を保持する」ために利用される

例:HTTPレスポンスで送られるクッキー

Set-Cookie: userId=12345; Max-Age=3600; Path=/; HttpOnly; Secure

セッションとは?

セッションは サーバー側で保持するユーザーごとの状態情報 です。
クライアントから送られてくる識別子(セッションID)をもとに、サーバーが状態を参照します。

特徴

  • 保存場所:サーバーメモリ、DB、Redisなど
  • 識別方法:セッションID(通常はクッキーで渡す)
  • 用途:ログイン情報、カート情報、一時的な画面状態など
  • 有効期間:サーバー側でタイムアウト制御

セッションとクッキーの違い(比較表)

項目 セッション クッキー
保存場所 サーバー(メモリ/DB/Redis) クライアント(ブラウザ)
識別方法 セッションID(サーバー側でマッピング) 名前=値 のペア
データ量 多めに保持可能(サーバー制約) 小さい(一般に4KB程度)
有効期限 サーバー側のタイムアウトで管理 Max-Age/Expiresでクライアント側に保存
セキュリティ セッションIDのみクッキーで渡す設計が一般的 直接保存するため改ざんや漏洩に注意
スケーラビリティ 外部セッションストアで共有が必要 スケーリングに直接影響しないがサイズ制限あり
用途 機密情報、複雑な状態保持 永続設定、トラッキング、簡易識別

Tomcatでのセッション管理

セッションタイムアウト設定(web.xml)

<web-app>
  <session-config>
    <session-timeout>30</session-timeout>
  </session-config>
</web-app>

JSESSIONIDのやり取り

  • サーバーがセッションを作成すると、レスポンスヘッダでセッションIDを返します:
Set-Cookie: JSESSIONID=abc123; Path=/; HttpOnly
  • ブラウザはこのクッキーを次回リクエストで送信し、Tomcatは対応するセッションを参照します

クッキーを直接操作する例

@RestController
public class CookieController {

    @GetMapping("/set-cookie")
    public String setCookie(HttpServletResponse response) {
        Cookie cookie = new Cookie("theme", "dark");
        cookie.setMaxAge(60 * 60 * 24 * 30); // 30日
        cookie.setPath("/");
        cookie.setHttpOnly(true);
        response.addCookie(cookie);
        return "cookie set";
    }
}

設計時のポイント

  • 機密情報や大量データ → セッションで管理
  • ユーザー設定や識別 → クッキーで保存(署名や暗号化推奨)
  • スケーラビリティ → Redis等でセッション外部化
  • セキュリティHttpOnly / Secure 属性、CSRF対策を実装
  • セッション固定化攻撃対策 → ログイン時にセッション再生成

まとめ

  • セッション:サーバー側の状態管理
  • クッキー:クライアント側の小さなデータ保存
  • 多くの実装では「セッションIDをクッキーで渡す」組み合わせが主流
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?