← PC・IT用語集へ戻る

セッション

Session
security web beginner
ユーザーがWebサイトにアクセスしてから離脱するまでの一連の接続状態を保持する仕組み。
セッション (Session)

概要(サマリー)

セッションは、ユーザーがWebサーバーにアクセスを開始してから、ブラウザを閉じたりログアウトしたりして離脱するまでの一連の行動(状態)を管理・維持する仕組みである。

Web通信の標準規格であるHTTPは、本来「1回のリクエストに対して1回返事をして終わり(状態を記憶しない)」という性質を持つ。そのため、そのままではページを移動するたびにログイン画面に戻ってしまう。セッションはこの問題を解決し、「同じユーザーが続けて操作していること」をサーバー側で記憶して、スムーズな操作を可能にする。


詳細解説

セッションとは何か(一連のアクセス状態を保持する仕組み)

Webサイトでショッピングカートに商品を入れたまま別のページへ移動したり、ログインした後にマイページを開いたりできる仕組みには、「セッション」が大きく関わっている。

セッション(Session)という言葉は、もともと「会議」や「一定の活動期間」を意味する。ITの世界では、「ユーザーがサイトを開いてから閉じるまでのひとまとまりの通信期間」を指す。

この期間中、サーバーはユーザーの個別情報(「誰がログインしているか」「カートに何が入っているか」など)をメモリやデータベースに一時的に保存し、ページをまたいでデータを引き継げるようにする。

Cookieとセッションの違い(保存場所と安全性)

状態を保持する仕組みとして、よく Cookie(クッキー)と比較されるが、データの「保存場所」と「安全性」が根本的に異なる。

  • Cookie(ブラウザ側に保存する)
  • データはユーザーのパソコン(ブラウザ)に直接保存される。
  • ユーザー側から中身を確認・変更できる場合があるため、パスワードや個人情報などの機密情報をそのまま入れるのは危険。
  • セッション(サーバー側に保存する)
  • データはWebサーバー側に保存される。
  • ユーザーからはデータの中身が直接見えにくいため、ログイン状態などの重要なステータス管理に使われる。

セッション管理の仕組み(セッションIDの受け渡し)

セッションが動く際、サーバー側は「誰がどのセッションデータを持っているか」を識別しなければならない。このときに使われるのが セッションID である。

セッションIDによる管理は、温泉旅館の「受付と下駄箱の鍵」のやり取りに例えられる。

  1. セッションの開始(受付):ユーザーがログインすると、サーバーはランダムで長い文字列の「セッションID(鍵)」を発行する。
  2. 鍵の受け渡し:サーバーは、そのセッションIDだけをブラウザの「Cookie」に書き込んで保存させる。
  3. データの保管(下駄箱):ログイン情報などの実データは、サーバー側の管理領域(下駄箱)に保管され、セッションIDと紐づけられる。
  4. 毎回の通信での照合:ブラウザはページを移動するたびに、Cookieに保存されているセッションIDをサーバーへ自動で送信する。サーバーはそのIDと一致する保管データを引き出して、「あ、このIDはさっきログインした田中さんだな」と判断する。

このように、ブラウザとサーバーの間でやり取りされるのは主に「中身のないランダムなID(鍵)」であり、重要データ自体をブラウザへ直接渡さずに済むため、安全性を高めやすい。

セッションの有効期限とライフサイクル

セッション情報は、サーバーのメモリ容量を圧迫しないよう、またセキュリティを高めるために「有効期限(寿命)」を設定するのが一般的である。

  • セッションタイムアウト:最後の操作から一定時間(例: 20分〜30分)何も操作がない場合、サーバーは自動的にセッションデータを破棄する。これにより、席を外した隙に他人に端末を操作されて情報が漏洩するリスクを防ぐ。
  • ブラウザの終了:セッションIDを保存しているCookieが「セッションCookie(ブラウザ終了時に消える設定)」である場合、ブラウザを閉じると自動的にセッションIDが消え、次回アクセス時はログアウト状態になる。

AIコーディングとの関係

ユーザー認証やセッション管理は、セキュリティ上の欠陥(脆弱性)が生まれやすい場所であるため、AIにコードを書かせる際も具体的な指示とレビューが必要である。

認証処理コードの自動生成

AIに「Node.jsのExpressとexpress-sessionライブラリを使って、ログインセッションを管理するサーバー側のコードを書いてください」と指示すると、セッションの初期設定、セッションIDの発行、ログイン時のデータ紐づけ、ログアウト時のセッション破棄(req.session.destroy())までの基本ロジックのたたき台を生成してもらいやすい。

セキュリティ設定の追加指示

AIが生成する初期コードは、時にローカル開発用の簡易設定になっており、本番環境で使うにはセキュリティが不足している(セッションIDが盗まれやすい状態など)ことがある。そのため、安全な接続(HTTPS)のみでセッションIDをやり取りする設定などを、AIに追加指示して書き直させる必要がある。

  • 指示の例:「本番環境(HTTPS環境)向けに、セッションIDのCookieに secure: truehttpOnly: true、および sameSite: 'lax' を設定し、JavaScriptからCookieを盗み見られないように初期化オプションを修正してください。」

よくある勘違い

セッション情報はブラウザ側に保存される?

「セッション」と「Cookie」を混同して、「セッションデータもブラウザに保存されている」と思う人が多いが、これは誤りである。

ブラウザ側にあるのは、セッションを特定するための「セッションID(鍵)」という短いテキストであることが多い。ユーザー名やカートの中身などの「セッションデータ本体」は、一般的にサーバーのメモリやデータベースなどに保存されている

そのため、ブラウザのキャッシュや履歴を削除しても、サーバー側のセッションデータ自体が即座に消えるわけではない(セッションIDが消えるため、サーバー側のデータにアクセスできなくなり、結果的にログアウト状態にはなる)。

セッションを使えばセキュリティ対策は万全?

セッションはCookieに重要データを直接保存する方式に比べて安全性を高めやすいが、それでも「セッションハイジャック」と呼ばれる攻撃リスクが存在する。

これは、悪意ある第三者が何らかの方法(XSSや通信の盗聴)でユーザーの「セッションID(鍵)」を盗み出し、そのIDを使って本人のブラウザになりすましてログイン状態を乗っ取る手法である。

このリスクを下げるためには、通信全体をHTTPS(SSL/TLS)にしてIDの盗聴を防ぐことや、ログイン成功時にセッションIDを古いものから「新しいIDに再生成(セッションIDの再生成)」して古い鍵を使えなくするなどの追加対策が必要である。

Cookieが無効でもセッションは使える?

通常、セッションIDはCookieを使ってブラウザに保存されるが、ブラウザの設定で「Cookieを受け入れない」状態にしている場合、標準的なセッション管理は動かなくなる。

技術的には、URLの末尾に https://example.com/mypage?session_id=XXXX のようにIDを直接付与してページ遷移させる「URL書き換え」という方法でCookieを使わずにセッションを維持することもできる。

しかし、この方法はURLをコピペしてSNSなどに貼り付けたときにセッションIDが他人に漏洩するリスクが高いため、現在のWeb開発では原則として「Cookie無効時のURLセッション」は避けるべきである。


情報ソース


まとめ

  • セッションは、アクセス開始から終了までの一連のユーザー状態をサーバー側で保持する仕組み。
  • 重要なデータをブラウザへ直接保存しない設計にしやすいため、Cookieだけに頼るより安全性を高めやすい。
  • ブラウザ側には「セッションID(鍵)」をCookieで保存させ、通信のたびに照合する構成がよく使われる。
  • セッションIDの盗聴や乗っ取りを防ぐため、HTTPSの導入やセッションIDの再生成などのセキュリティ設計が重要である。

より詳しくAIに聞いてみよう

  • セッションとCookieの違いについて、IT知識のない一般の方に例え話を使って説明する文章を書いてください。
  • セッションハイジャックとはどのような仕組みの攻撃ですか?また、防ぐための代表的な3つの対策を教えてください。
  • ログイン完了後にセッションIDを再発行する(セッションの再構成)必要があるのはなぜですか?
  • Node.js (Express) のセッション管理で、セッションデータの保存先をメモリ(MemoryStore)からRedisなどのデータベースに変更する理由とメリットを教えてください。
  • AIコーディングでセッションを用いた「パスワード変更フォーム」を作成してもらう際、どのようなセキュリティレビュー項目をプロンプトに含めるべきですか?