sessionとcookieの違い
今回は、session
とcookie
に関してです。
よくある話題なのですが、自分の理解が曖昧だったので、調べました。
まず、なぜ、session
という技術が必要になったかです。
例えば、自分がamazonで商品を購入する時にはアカウント登録して、ログインをしてから何かを購入します。 ログインの状態を維持できるのは、HTTPがステートレスな状態から、ステートフルの状態を維持しているからです。
このステートレス・ステートフルの意味ですが、英語/和訳にすると
stateless→state/less→状態がない statefull→state/full→状態がある
こんな感じのニュアンスになると思います。 ここの意味がわかってなかったので、理解しづらかったです。
amazonにログイン処理をするだけだと、ステートレスなレスポンスを送り、ログイン状態が維持できません。
HTTPのレスポンスには、ステートレスなリクエスト・レスポンスしかありません。
このログイン状態を維持するために生まれたのが、cookie
です。
cookie
により、ログイン状態の維持でも大丈夫なのですが、自分のログイン情報が常にむき出しに晒されます。
悪意のある人なら、簡単に乗っ取ることができます。
なので、cookie
の情報をデータベースに一時的に保存することを可能にしたのが、session
です。
session
に情報を渡すことで、データベース上に自分の状態を保持できるようになります。
amazonで本を購入するときにカートに入れて、後日ログインしてもカートに残ったままにできるのは、データベースに情報があるからです。
ただし、session
に渡す情報で、機密性の高い情報を渡すのは危険です。
悪意のある方が(以下略・・・)
そこで、基本的にはsession
に情報を渡すのは、cookieのid
のみが好ましいです。
cookieの受け渡しだけをすることによって、大切なカート情報はデータベースに保存されることになります。
session
というやり方がないと、安全なwebサービスが成り立っていなかったんですね。