セッション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セッションと呼ばれることがあります。
| 種類 | Cookieに入るもの | サーバ側ストア |
|---|---|---|
| セッションID方式 | session_id のみ | 必要 |
| 暗号化Cookie方式 | 暗号化されたセッション情報 | 不要な場合あり |
初心者はまず、セッションID方式を基本として理解してください。ブラウザはIDだけを持ち、ログイン状態の本体はサーバ側にある、という形です。
まとめ
セッションIDは、サーバ側にあるログイン状態を取り出すためのIDです。
- ブラウザには
session_idCookie を持たせる - サーバ側に
session_id -> userIdの対応を保存する - リクエスト時にブラウザがCookieを自動送信する
- サーバはセッションIDを見てログイン状態を判断する
- ログアウト時はサーバ側のセッションを削除する
この仕組みが、昔から使われてきたCookieセッションの基本です。
参考リソース
- 公式ドキュメント - セッションIDとは何か - ログイン状態をサーバ側で管理する仕組み を確認するための一次情報