Open1

クッキーとセッションIDについて🍪

TaiyoTaiyo

🍪 CookieとセッションID

Cookieとは?🍪

  • ブラウザが保持する「小さな情報の断片(key=value形式)」
  • サーバーが Set-Cookie ヘッダーで色々送ってくる(sessionIDがほとんど)。そしてブラウザが保存しといてくれるもの
  • 次回以降、同じドメインにアクセスすると自動でサーバーに送られる

以下流れの説明

1. まずサーバー側がset-Cookieを送信

  • サーバー側がクライアントに向けて送る
Set-Cookie: sessionId=abc123; Path=/; HttpOnly

2. クライアント側がそれを受け取る、送信

  • sessionId=abc123; Path=/; HttpOnlyブラウザのCookieストアに保存される
  • ユーザーが同じドメインに再びアクセスすると,ブラウザが自動で保存したクッキーをリクエストヘッダーに追加して送信する。
GET /dashboard HTTP/1.1
Host: example.com
Cookie: sessionId=abc123

3. サーバー側がセッションIDを受け取り、ユーザー情報と紐付け

  • サーバーは sessionId=abc123 を使って、セッションストレージを参照。
セッションストア["abc123"] = {
  userId: 123,
  isLoggedIn: true
}

🍪 Cookie属性 一覧表

属性名 用途・意味 備考
name=value クッキーのキーと値を指定 sessionId=abc123 必須。1つのクッキーの中核部分
Expires クッキーの有効期限を指定(日時形式) Expires=Wed, 21 Oct 2025 07:28:00 GMT 指定がないとセッションクッキーになる
Max-Age 有効期間を秒数で指定(Expires より優先) Max-Age=3600 0で即削除。-1は無効
Domain クッキーが送られる対象ドメインを指定 Domain=.example.com .付きでサブドメイン含む
Path クッキーが送られる対象パスを指定 Path=/account パスが一致しないと送られない
Secure HTTPS通信時にのみクッキーを送信 Secure HTTPS必須
HttpOnly JavaScriptの document.cookie からアクセス不可にする(XSS防止) HttpOnly セキュリティ強化に必須
SameSite 外部サイトからの送信を制限(CSRF対策) SameSite=Lax / Strict / None None の場合は Secure も必要

📎 補足: SameSite 属性のオプション比較表

動作の内容 主な用途 注意点
Strict 外部サイトからのすべてのリクエストにクッキーを送信しない 金融系・管理画面など厳密な認証が必要な場面 ユーザビリティが落ちる(外部リンク経由などNG)
Lax 外部サイトからの GET リクエスト時のみクッキーが送信される 多くの通常ログインに適用可能 POST はブロックされるためCSRF対策として有効
None すべてのリクエストでクッキーが送信される(外部サイト含む) サードパーティ Cookie、API連携など Secure 属性が必須