こんにちは。
私を含め初学者の方が躓きやすいCookieとSessionについて、
備忘録を兼ねた解説を行いたいと思います。
##Cookieとは
WEBブラウザとWEBサーバーの一連のやり取りにおいて、状態を保持管理するための仕組みのこと。
##Sessionとは
WEBブラウザとWEBサーバーのやり取りにおいて、一連の関連性のある処理の流れのことをセッションと呼びます。
例えばECサイトなどで、「商品を選ぶ」「商品を買い物カゴに入れる」「商品を確認する」「商品を購入する」といった、
処理の流れ(一時的な活動)がセッションとなります。
##ではなぜ必要なのか
通常私たちが使用しているWEBブラウザが行うHTTP通信は状態を保持する仕組みがありません=「ステートレスな通信」。
例えば、先ほどのSessionの箇所で記載した処理の流れは、それぞれが異なるHTTP通信です。
そのため、WEBサーバー内に状態が保持されていなければ商品を確認することができないと言った事態になります。
cookieはそんなHTTP通信を補完し、以前の状態を踏まえたうえで次の動作処理させるための仕組みとして生まれました。
##通信ではどんなやり取りが行われているか
WEBサーバーへの通信を行い、レスポンス通信に「Set-Cookie」ヘッダーを含めることでブラウザへcookieを送信しています。
この際にcookieの有効期限等を設定することができます。それにより、ブラウザは以降のHTTP通信に「Cookie」ヘッダーを
含めることができるようになるので、WEBサーバーは誰が接続してきたのかを識別することができるようになります。
基本的に有効期限の設定されていないcookie(セッションcookie)はWEBブラウザが閉じられると同時に削除されます。
##Sessionの存在理由とは
上記でSessionは処理の流れと記載しましたが、厳密に言うとWEBサーバーから返されるcookieのなかに
SessionIDが含まれています。その事から、WEBサーバーはブラウザから送られてくるcookieのなかに保存された
セッションIDを識別し、WEBサーバー内に保存されているセッションデータを参照することができます。
つまりSessionが無ければ個人を識別することもできないですし、処理を進めることもできないというわけですね。
そのため、セッションIDが盗まれてしまうと、なりすましなども可能になります=セッションハイジャック。
以上、簡単ではありますがcookieとSessionのお話でした。