0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

個人的備忘録:認証の仕組みを実装する中で、Cookie とセッションの違いの言語化があいまいだったため、アウトプットしてみた

Last updated at Posted at 2025-02-08

はじめに

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 ではなく、ブラウザの localStoragesessionStorage に保存
  • リクエストごとに JWT を送信(セッション ID の代わりに)
  • サーバーは JWT の署名を検証し、ユーザーを特定

💡 JWT は一度発行されると、サーバー側で情報を保持する必要がないため、スケーラブルな認証が可能。

4. Cookie・セッション・JWT の使い分け

方式 メリット デメリット 用途
Cookie 簡単に実装可能 セキュリティリスクあり(盗聴・改ざん) 軽い情報の保存(テーマ設定、言語設定)
セッション(サーバー管理) 安全性が高い サーバー負荷が増える ログイン管理
JWT(トークン認証) スケーラブル、サーバーレス向き 一度発行したトークンを無効化できない API 認証、マイクロサービス

まとめ

Cookie は クライアント側で情報を保持 し、セッションは サーバー側で管理 されるため、用途によって使い分ける必要があります。

また、最近では JWT を利用した認証方式 も一般的になり、サーバーレスアーキテクチャとの相性が良いのが特徴です。

それぞれの特性を理解し、開発するアプリケーションに適した方法を選ぶことが重要です。

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?