はじめに
Webアプリケーションでは、ユーザーのログイン状態を維持するために Cookie や セッション が利用されます。
特に、認証の仕組みを設計する際には、それぞれの特性を理解することが重要です。
本記事では Cookie とセッションの違い、Cookie を利用したセッション管理、JWT との比較 について解説します。
書こうと思ったきっかけ
Webサービスを開発する中で、「ログイン状態をどのように管理するのか?」 という疑問がよく出てきます。
特に、Cookie・セッション・JWT の違いを理解しないまま実装すると、セキュリティリスクやスケーラビリティの問題が発生 することがあります。
そのため、それぞれの仕組みを整理し、どのような場面でどれを選ぶべきかを考えるために、この記事を書きました。
1. Cookie と セッションの違い
項目 | Cookie | セッション |
---|---|---|
データの保存場所 | クライアント側(ブラウザ) | サーバー側 |
データの管理方法 | キーと値のペアを保存し、クライアントに保持させる | サーバー側でユーザー情報を管理し、クライアントにはセッションIDのみ渡す |
セキュリティ | クライアントで保存されるため盗まれやすい(改ざん・盗聴のリスクあり) | サーバー管理のため比較的安全(ただし、セッションIDの盗難には注意) |
有効期限 | 開発者が設定可能(数分~永続保存も可能) | 通常は短期間(ブラウザを閉じると無効化されるのが一般的) |
データのサイズ | 4KBまで(サイズ制限あり) | 制限なし(ただし、メモリやストレージの使用量に注意) |
主な用途 | ユーザーの設定やトラッキング(例:サイトのテーマ、カート情報、ログイン状態の保持など) | ユーザーの認証情報やアクティブなログイン状態の管理 |
2. Cookie を利用したセッション管理
セッション管理の流れを簡単に表すと、以下のようになります。
① ユーザーがログイン → サーバーで認証 → サーバーがセッション ID を発行
↘ サーバー上でユーザー情報を保持
↘ セッション ID を Cookie に保存 → クライアント(ブラウザ)
② 以降のアクセス時 → Cookie のセッション ID を送信 → サーバーでセッション ID を参照
→ ユーザー情報を取得 → **ログイン状態を維持**
セッションは Cookie を使って管理される ことが多いですが、セッション自体は サーバー側で管理 されます。
① ユーザーがログイン
- ログインフォームで メールアドレス・パスワード を入力し、サーバーに送信。
- サーバー側で データベースの情報と照合し、認証を実施。
② サーバーがセッション ID を発行
- 認証成功後、サーバーは セッション ID を生成 し、サーバー上に一時的にユーザー情報を保持。
- セッション ID を Cookie に保存 し、クライアント(ブラウザ)に送信。
💡 ここで Cookie が使われる!
- クライアントは セッション ID を Cookie に保存 し、次回アクセス時にサーバーに送ることで、ログイン状態を維持する。
③ 以降のアクセス時
- ユーザーが次回アクセスすると、ブラウザの Cookie に保存されたセッション ID を自動的に送信。
- サーバーは セッション ID からユーザー情報を取得し、ログイン状態を確認。
3. Cookie を使わないセッション管理(JWT 方式)
通常のセッション管理は 「サーバー側で情報を保持する」 ため、
スケーラビリティ(負荷分散)の課題があります。
この問題を解決するために、最近では JWT(JSON Web Token) を使った認証方式が増えています。
JWT を使ったセッション管理の流れ
- ユーザーがログイン → サーバーが JWT(トークン)を発行
- JWT を Cookie ではなく、ブラウザの
localStorage
やsessionStorage
に保存 - リクエストごとに JWT を送信(セッション ID の代わりに)
- サーバーは JWT の署名を検証し、ユーザーを特定
💡 JWT は一度発行されると、サーバー側で情報を保持する必要がないため、スケーラブルな認証が可能。
4. Cookie・セッション・JWT の使い分け
方式 | メリット | デメリット | 用途 |
---|---|---|---|
Cookie | 簡単に実装可能 | セキュリティリスクあり(盗聴・改ざん) | 軽い情報の保存(テーマ設定、言語設定) |
セッション(サーバー管理) | 安全性が高い | サーバー負荷が増える | ログイン管理 |
JWT(トークン認証) | スケーラブル、サーバーレス向き | 一度発行したトークンを無効化できない | API 認証、マイクロサービス |
まとめ
Cookie は クライアント側で情報を保持 し、セッションは サーバー側で管理 されるため、用途によって使い分ける必要があります。
また、最近では JWT を利用した認証方式 も一般的になり、サーバーレスアーキテクチャとの相性が良いのが特徴です。
それぞれの特性を理解し、開発するアプリケーションに適した方法を選ぶことが重要です。