セキュリティ・認証の用語一覧へ
このページの目次
セキュリティ・認証初級図解あり

セッションとは?

読み方:セッション

最終更新:2026/08/18

3秒でわかる

サーバー側が利用者ごとの状態を覚えておく仕組み。毎回接続が切れるHTTPでもログイン状態を続けさせるために、識別子をブラウザへ預けて紐づけます。

30秒図解

セッションはブラウザへ推測できない識別子だけを預け、userId 42などの利用者状態をサーバー側で保持する仕組み
セッションIDは運ぶ鍵であり、利用者状態の中身はサーバー側に置きます。

もう少し詳しく

どういうものか

セッションは、サーバーが利用者ごとの一時的な状態を覚えておく仕組みです。ログインが成功した時点でサーバーがセッションを作り、そこに利用者 ID などを記録し、識別子であるセッション ID だけを Cookie としてブラウザに返します。以降のリクエストにはその Cookie が自動で付くので、サーバーは ID を手掛かりに「これは誰からのリクエストか」を判断できます。

なぜ必要か

HTTP は一回のやり取りが終わると相手を忘れる設計です。この性質のままだと、ページを移動するたびにログインし直すことになります。かといって利用者 ID をそのまま Cookie に入れると、値を書き換えるだけで他人になりすませてしまいます。推測できないセッション ID だけを渡し、中身はサーバーが持つことで、この問題を避けています。

具体例

import express from "express";
import session from "express-session";

const app = express();
<a href="/glossary/app-use" class="text-primary font-medium underline underline-offset-2 hover:text-primary-dark">app.use</a>(session({
  secret: process.env.SESSION_SECRET,
  resave: false,
  saveUninitialized: false,
  cookie: { httpOnly: true, secure: true, sameSite: "lax", maxAge: 1800000 },
}));

app.post("/login", (req, res) => {
  // 認証が通ったとして
  req.session.regenerate(() => {
    req.session.userId = 42;
    res.redirect("/mypage");
  });
});

app.post("/logout", (req, res) => {
  req.session.destroy(() => res.redirect("/"));
});

httpOnly は JavaScript から Cookie を読めなくする指定、secure は HTTPS のときだけ送る指定です。

似た用語との違い

語状態の置き場所取り消し
セッションサーバー側サーバーで消せば即時
Cookieブラウザ側運ぶ入れ物そのもの
JWTトークン内部(署名付き)期限切れまで有効になりがち


つまずきやすいところ

ログイン成功時にセッション ID を作り直さないと、攻撃者があらかじめ用意した ID を被害者に使わせるセッションフィクセーションが成立します。上の例で regenerate を呼んでいるのはこのためです。もう一つ多いのが、サーバーを複数台に増やしたとたんに「たまにログアウトする」という症状です。既定のセッション保存先がプロセスのメモリなので、別の台に振り分けられると相手を知らないまま扱われます。Redis など共有の保存先に移すか、振り分けを固定して解決します。

次に学ぶ

JWTとは?

知識のつながり

サイドバーと同じ推奨ルート・関連語を、まとめて確認できます。

現在地セッションセキュリティ

LEARN BY DOING

この用語を、教材で使ってみる

直接関連する編と、その編を含むコースです。用語だけで終わらず、ブラウザ上で実際に手を動かせます。

すべてのコースを見る