
Session(セッション)ってなに?
どんな時に利用されるの?
こういった疑問にこたえます。
- セッションとは何かがわかる
- セッション管理の仕組みがわかる
エンジニアの僕がわかりやすく説明します。
Session(セッション)とは?
WebブラウザとWebサーバの一連の関連性のあるやりとりをセッションと呼びます。
例えば、ショッピングサイトで商品を購入する場合、商品を選ぶ、商品をカートに入れる、カートの中身を確認する、商品を購入するといった一連の処理がセッションになります。
HTTPはステートレスなプロトコルなため、前後のやり取りの関連性が把握できないという弱点があるんでしたね。
セッションの管理
関連性のある一連の処理として扱いたい場合はCookieを用いてセッションを管理します。
Webサーバには複数のWebブラウザからのアクセスがあります。
そのため、リクエストがどのブラウザからのものであるかをWebサーバが判別できなければ一連の処理であることが認識できません。
つまり、WebサーバがどのWebブラウザからのアクセスであるかを判別するためのデータが必要です。
この識別データのやり取りにCookieの仕組みを利用します。
セッション管理において、Webブラウザを識別するための情報をセッションIDと呼び、セッションIDはWebサーバで生成され、Cookieに含めてWebブラウザに送信されます。
WebサーバからセッションIDを受け取ったWebブラウザはセッションIDを保存し、2回目以降の通信には保存したセッションIDの情報をCookieに含めることでWebサーバとのセッションが保たれます。

また、セッション内で処理された「なんお商品をカートに入れたか?」などの情報はセッションIDと紐づいてセッションデータとしてWebサーバ側で保存しています。
WebブラウザはセッションIDを送ることでセッションIDに紐づくセッションデータを自身のデータとして参照できるようになります。

セッションIDのやり取り
セッションIDのやり取りはCookieを用いる方法が一般的です。
Cookieが利用できないブラウザもあるため、URLにセッションIDを埋め込む方法やWebページのフォームにセッションIDを埋め込む方法などがあります。
しかし、これらの方法はセッションIDの漏洩リスクが高いため、推奨される手法ではありません。
セッションIDは個人を識別するための重要な情報なので、なりすましを防ぐためにも推測されにくい値である必要があります。
セッションを利用した攻撃(セッションハイジャック)

セッションを悪用した攻撃としてセッションハイジャックがあります。
セッションハイジャックはセッションIDを利用して正規のユーザのセッションを乗っ取る攻撃です。
攻撃者は取得したセッションIDを使うことで正規のユーザと同じ権限で操作が可能となるため、ユーザの個人情報取得や改ざんを行なったり、ユーザが登録しているクレジットカードを用いて多額の買い物ができてしまいます。
Session(セッション)とは?まとめ
解説のポイントをまとめます。
- セッションとはWebブラウザとWebサーバの一連の関連性のあるやりとりのこと
- WebサーバはセッションIDと紐づくセッションデータを管理している
- セッションIDのやり取りはCookieを用いる方法が一般的
- セッションを悪用した攻撃としてセッションハイジャックがある
以上、お疲れ様でした。
コメント