セッションIDとは何か - ログイン状態をサーバ側で管理する仕組み

入門 | 9分 で読める | 2026.06.14

公式ドキュメント

セッションIDとは

セッションIDは、サーバ側に保存されたログイン状態を取り出すためのIDです。

ブラウザにすべてのログイン情報を持たせるのではなく、ブラウザには短いIDだけを渡します。ログイン状態の本体はサーバ側に置きます。

Set-Cookie: session_id=abc123; HttpOnly; Secure; SameSite=Lax

この abc123 がセッションIDです。

ログイン時に何が起きるか

ログイン処理の流れは、次のようになります。

sequenceDiagram
  participant Browser as ブラウザ
  participant Server as サーバ
  participant Store as セッションストア

  Browser->>Server: IDとパスワードを送信
  Server->>Server: 認証する
  Server->>Store: session_id=abc123 に user_id を保存
  Server-->>Browser: Set-Cookie: session_id=abc123

サーバ側のセッションストアには、次のような情報が保存されます。

{
  "abc123": {
    "userId": "user_001",
    "role": "student",
    "loginAt": "2026-06-14T10:00:00Z"
  }
}

ブラウザ側にあるのは、session_id=abc123 だけです。

マイページを見るとき

ログイン後にマイページへアクセスすると、ブラウザはCookieを自動で送ります。

GET /mypage HTTP/1.1
Host: example.com
Cookie: session_id=abc123

サーバは session_id を見て、セッションストアからユーザー情報を取り出します。

app.get("/mypage", async (req, res) => {
  const sessionId = req.cookies.session_id;
  const session = await sessionStore.get(sessionId);

  if (!session) {
    return res.redirect("/login");
  }

  res.send(`Hello, ${session.userId}`);
});

ポイント: Cookie に入っているのはログイン情報そのものではなく、サーバ側のログイン情報を引くためのIDです。

ログアウト時に何が起きるか

サーバ側セッションの強みは、ログアウトが分かりやすいことです。

app.post("/logout", async (req, res) => {
  const sessionId = req.cookies.session_id;
  await sessionStore.delete(sessionId);

  res.clearCookie("session_id");
  res.redirect("/login");
});

サーバ側の abc123 を削除すれば、そのセッションIDは無効になります。仮に古いCookieがブラウザに残っていても、サーバ側にセッションがないためログイン済みとは扱われません。

この「即時失効しやすい」という点は、サーバ側セッションの大きな利点です。

セッションストアとは

セッションストアは、セッションIDとログイン状態を保存する場所です。

小さなアプリではメモリに置くこともあります。しかし、本番環境では複数サーバで動くことが多いため、Redis、RDB、DynamoDB、Memcached などの共有ストアを使います。

保存先特徴
メモリ簡単だがサーバ再起動で消える
Redis高速でセッション保存に使いやすい
RDB管理しやすく永続化しやすい
DynamoDB / KVサーバーレス構成で使いやすい

JWT との違い

JWT は、署名付きのトークン自体にユーザー情報や期限を持たせる方式です。

{
  "sub": "user_001",
  "role": "student",
  "exp": 1760000000
}

API側は署名を検証すれば、セッションストアに問い合わせずに認証できます。これはスケールしやすい一方、発行済みトークンを即時に無効化しにくいという弱点があります。

観点サーバ側セッションJWT
状態の本体サーバ側トークン内
検証ストアを見る署名を見る
即時ログアウトしやすい工夫が必要
サーバ間共有ストア共有が必要署名鍵共有でよい

「Cookie セッション」と言うと、Cookieにログイン状態の本体が全部入っているように聞こえるかもしれません。

実務では、次のどちらもCookieセッションと呼ばれることがあります。

種類Cookieに入るものサーバ側ストア
セッションID方式session_id のみ必要
暗号化Cookie方式暗号化されたセッション情報不要な場合あり

初心者はまず、セッションID方式を基本として理解してください。ブラウザはIDだけを持ち、ログイン状態の本体はサーバ側にある、という形です。

まとめ

セッションIDは、サーバ側にあるログイン状態を取り出すためのIDです。

  • ブラウザには session_id Cookie を持たせる
  • サーバ側に session_id -> userId の対応を保存する
  • リクエスト時にブラウザがCookieを自動送信する
  • サーバはセッションIDを見てログイン状態を判断する
  • ログアウト時はサーバ側のセッションを削除する

この仕組みが、昔から使われてきたCookieセッションの基本です。

参考リソース

  • 公式ドキュメント - セッションIDとは何か - ログイン状態をサーバ側で管理する仕組み を確認するための一次情報

次に読む記事

← 一覧に戻る
PR
PR
PR
PR