🍣
【初学者によるまとめ】この一冊で全部わかるWeb技術の基本 「Chapter3」>「14 セッション」
目的:「イラスト図解式 この一冊で全部わかるWeb技術の基本」の要点を自分なりにまとめ、Qiitaへアウトプットして理解力の向上に努める。
注意点 |
---|
🤔 ←この絵文字の文章は個人的な見解になります。的外れなこともあるかと思います。 |
例)🤔<(感想、考察、疑問点など) |
(参考書籍)
(参考サイト)
:::note info
セッション
- 関連性を持つ一連の処理の流れのまとまり・単位のこと
- 「何かしらの実体を持つデータ」自体を指さない
- セッションをステートフルに管理するための"セッションID"はサーバーに保存される
- セッションは「リクエストとレスポンスの応返答する'通信の開始から終了までの処理'」を指す
- 「セッションはサーバーに保存される」は表現として不適切
- セッションは「リクエストとレスポンスの応返答する'通信の開始から終了までの処理'」を指す
例1)システムに「ログインしてからログアウトするまで」 ⇒ 「認証のセッション」といえる
例2)ECサイトで「商品を買い物カゴに入れて、購入するまで」 ⇒ 「商品購入のセッション」といえる
:::
- HTTP通信はステートレスであるが、一部ステートフルな仕様を実装したい場合に
セッション
という"一連の処理または処理前後の関連情報"を持たせることで柔軟なシステムを実現している
:::note warn
【セッション と Cookie の違いについて】
-
セッション
= 「通信の開始から終了までの一連の処理」- "何かしらのデータ"の意味合いは無い
-
Cookie
= 「ステートフルな通信を実現するための仕組み」- ステートレスなHTTPの拡張機能
- 具体的には"状態データ"を保持するために、状態情報を載せた小さなテキストファイルを送受信する
- Webブラウザに保存される
:::
- ステートレスなHTTPの拡張機能
セッションの管理
『ステートレスな通信において不特定多数のユーザーからのアクセスの"セッション"(状態データ)を持たせたい場合はCookieに格納して管理する』
- この際に「どのクライアントがどのCookie(状態)なのか」をしっかりと識別して管理する必要がある
- 当然ながら他の人の Cookie と混同するようなことがあってはセキュリティとして大問題
⇒そこで『セッションID
』という識別のため情報も付与して管理している
:::note info
セッションID
(SID : Session ID)… 「クライアントごとの状態情報を保持するための識別情報」
- SID によってクライアントを混合せずに一意に状態データを紐づけて管理できる
::: - セッションID はWebサーバーで生成されて Cookie に載せて Web ブラウザに送信する
- この際に Cookie に SID を載せているため Web ブラウザ側で保存される
⇒これによりクライアントとサーバーでセッションIDを保持している状況となる
- この際に Cookie に SID を載せているため Web ブラウザ側で保存される
- またブラウザ側から Web サーバー宛てにリクエストがある際には Cookie を利用して送信される
⇒この際のメッセージヘッダーにも SID が載せられている- これにより受け取ったサーバー側で「今受け取った SID とサーバー側で管理している SID の一覧を照合」することで"クライアントの識別"および"処理状態の管理"が実現されている
(画像1:SIDで紐づけたセッションデータのイメージ図)
:::note alert
- 上図では適当なSIDを付与しているが、セッションIDは第三者が推測しやすいものではあってはならない
- 「悪質ななりすましの行為」である"セッションハイジャック"を許してしまう可能性がある
:::
- 「悪質ななりすましの行為」である"セッションハイジャック"を許してしまう可能性がある
セッションIDのやりとり
- セッションIDを管理する方法には Cookie が一般的
Discussion