CookieとSessionとは何か?ログイン状態はどうやって維持されているのか

あけお

スクールに多額のお金を支払う前に、僕の記事で学習してね!

目次

はじめに

Webアプリを使っていると、

  • ログインできる
  • ページを移動してもログイン状態が続く

これは当たり前のように感じますが、
実は HTTPの仕組みだけでは実現できません。

なぜなら、

HTTPはステートレス(状態を覚えない)

からです。

では、
Webアプリはどうやって
ログイン状態を維持しているのか?

その答えが
CookieとSession です。

この記事では、

  • なぜCookieとSessionが必要なのか
  • それぞれ何をしているのか
  • Webエンジニアはどこまで理解すればいいのか

を、初心者向けに順番で解説します。

HTTPはステートレスだった

まず前提の確認です。

HTTPは、

  • 前回の通信を覚えない
  • 毎回独立した通信

という性質を持っています。

つまり、

「この人はさっきログインした人だ」
という記憶がHTTPにはない

ということです。

ステートレスのままだと何が困る?

もしHTTPだけなら、

  • ページを移動するたびにログイン要求
  • カート情報が消える
  • ユーザー識別ができない

という
使い物にならないWebになります。

そこで登場するCookieとSession

この問題を解決するために使われるのが、

  • Cookie
  • Session

です。

Cookieとは何か?

Cookieとは一言でいうと、

ブラウザに保存される小さなデータ

です。

Cookieは、

  • ブラウザ側(クライアント)
  • 各ドメインごと

に保存されます。

Cookieには何が入っている?

代表的な内容は、

  • セッションID
  • ログイン状態の識別子
  • 設定情報

👉
重要なデータそのものは入れません。

Sessionとは何か?

Sessionとは、

サーバー側で管理されるユーザーの状態情報

です。

  • 誰がログインしているか
  • どんな権限を持っているか

といった情報を
サーバー側で保持します。

CookieとSessionの関係

ここが一番大事です。

CookieとSessionはセットで使われる

流れはこうです。

  1. ユーザーがログイン
  2. サーバーがSessionを作成
  3. SessionIDをCookieに保存
  4. 次回以降のリクエストでCookie送信
  5. サーバーがSessionを特定

👉
Cookieは「名札」
Sessionは「名簿」

というイメージです。

なぜSessionIDだけをCookieに入れるのか?

理由は
セキュリティです。

  • 個人情報を直接Cookieに入れない
  • 盗まれても被害を最小限にする

👉
重要情報は必ずサーバー側に置く

これが基本原則です。

Cookieだけではダメなのか?

技術的には
Cookieだけでも実装できますが、

  • 改ざんリスク
  • 情報漏洩リスク

が高くなります。

そのため、

実務では
Cookie+Sessionが基本

です。

Sessionはどこに保存されている?

Sessionは
環境によって保存先が変わります。

  • メモリ
  • ファイル
  • データベース
  • Redis(キャッシュ)

Laravelでは
設定で切り替えられます。

ログアウトすると何が起きる?

ログアウト時には、

  • Sessionを破棄
  • Cookieを無効化

します。

これにより、

ログイン状態が完全に消える

仕組みです。

Cookieには有効期限がある

Cookieには、

  • 有効期限
  • セッションCookie

があります。

  • ブラウザを閉じると消える
  • 一定期間残る

👉
「ログイン保持」機能
ここに関係します。

セキュリティ上の注意点(概要)

CookieとSessionを使う際は、

  • HTTPS必須
  • HttpOnly属性
  • Secure属性

などが重要です。

👉
詳細は
セキュリティ章で扱います。

Laravelではどう扱われている?

Laravelでは、

  • 認証機能
  • Session管理
  • Cookie操作


フレームワークで隠蔽されています。

だからこそ、

仕組みを知っておくことが大事

です。

Webエンジニアはどこまで理解すればいい?

結論です。

以下が説明できれば十分です。

  • HTTPはステートレス
  • Cookieはブラウザ側
  • Sessionはサーバー側
  • SessionIDでひも付ける

これが言えれば、
面接でも実務でも困りません。

CookieとSessionが分かると何が良くなる?

  • ログイン処理が怖くなくなる
  • 認証エラーの原因が分かる
  • LaravelのAuthが理解しやすくなる

👉
Webアプリの核心が見えます。

次に学ぶべきこと

CookieとSessionが理解できたら、
次は👇です。

👉 Webで使われるデータ形式とは何か?
HTML・CSS・JSONの役割を整理する

まとめ

  • HTTPはステートレス
  • CookieとSessionで状態を管理
  • Cookieは名札、Sessionは名簿
  • ログインの正体が分かる

この記事は
Webアプリ理解の分水嶺です。

あけお

あなたの挑戦を応援しています!!

よかったらシェアしてね!
目次