🍣

【初学者によるまとめ】この一冊で全部わかるWeb技術の基本 「Chapter3」>「14 セッション」

2024/12/19に公開

目的:「イラスト図解式 この一冊で全部わかるWeb技術の基本」の要点を自分なりにまとめ、Qiitaへアウトプットして理解力の向上に努める。

注意点
🤔 ←この絵文字の文章は個人的な見解になります。的外れなこともあるかと思います。
例)🤔<(感想、考察、疑問点など)

(参考書籍)

  1. イラスト図解式 この一冊で全部わかるWeb技術の基本

(参考サイト)

  1. idealump
  2. Qiita - ついにセッションと Cookie の違いを理解する
  3. docomo business
  4. ThinkIT

:::note info
セッション

  • 関連性を持つ一連の処理の流れのまとまり・単位のこと
    • 「何かしらの実体を持つデータ」自体を指さない
  • セッションをステートフルに管理するための"セッションID"はサーバーに保存される
    • セッションは「リクエストとレスポンスの応返答する'通信の開始から終了までの処理'」を指す
      • 「セッションはサーバーに保存される」は表現として不適切

例1)システムに「ログインしてからログアウトするまで」 ⇒ 「認証のセッション」といえる
例2)ECサイトで「商品を買い物カゴに入れて、購入するまで」 ⇒ 「商品購入のセッション」といえる
:::

  • HTTP通信はステートレスであるが、一部ステートフルな仕様を実装したい場合にセッションという"一連の処理または処理前後の関連情報"を持たせることで柔軟なシステムを実現している

:::note warn
【セッション と Cookie の違いについて】

  • セッション = 「通信の開始から終了までの一連の処理」
    • "何かしらのデータ"の意味合いは無い
  • Cookie = 「ステートフルな通信を実現するための仕組み」
    • ステートレスなHTTPの拡張機能
      • 具体的には"状態データ"を保持するために、状態情報を載せた小さなテキストファイルを送受信する
      • Webブラウザに保存される
        :::

セッションの管理

『ステートレスな通信において不特定多数のユーザーからのアクセスの"セッション"(状態データ)を持たせたい場合はCookieに格納して管理する』

  • この際に「どのクライアントがどのCookie(状態)なのか」をしっかりと識別して管理する必要がある
    • 当然ながら他の人の Cookie と混同するようなことがあってはセキュリティとして大問題

そこで『セッションID』という識別のため情報も付与して管理している

:::note info
セッションID(SID : Session ID)… 「クライアントごとの状態情報を保持するための識別情報」

  • SID によってクライアントを混合せずに一意に状態データを紐づけて管理できる
    :::
  • セッションID はWebサーバーで生成されて Cookie に載せて Web ブラウザに送信する
    • この際に Cookie に SID を載せているため Web ブラウザ側で保存される
      ⇒これによりクライアントとサーバーでセッションIDを保持している状況となる
  • またブラウザ側から Web サーバー宛てにリクエストがある際には Cookie を利用して送信される
    ⇒この際のメッセージヘッダーにも SID が載せられている
    • これにより受け取ったサーバー側で「今受け取った SID とサーバー側で管理している SID の一覧を照合」することで"クライアントの識別"および"処理状態の管理"が実現されている

(画像1:SIDで紐づけたセッションデータのイメージ図)
image.png

:::note alert

  • 上図では適当なSIDを付与しているが、セッションIDは第三者が推測しやすいものではあってはならない
    • 「悪質ななりすましの行為」である"セッションハイジャック"を許してしまう可能性がある
      :::

セッションIDのやりとり

  • セッションIDを管理する方法には Cookie が一般的

Discussion