sessionとcookieの違い

今回は、sessioncookieに関してです。 よくある話題なのですが、自分の理解が曖昧だったので、調べました。

まず、なぜ、sessionという技術が必要になったかです。

例えば、自分がamazonで商品を購入する時にはアカウント登録して、ログインをしてから何かを購入します。 ログインの状態を維持できるのは、HTTPがステートレスな状態から、ステートフルの状態を維持しているからです。

このステートレス・ステートフルの意味ですが、英語/和訳にすると

stateless→state/less→状態がない statefull→state/full→状態がある

こんな感じのニュアンスになると思います。 ここの意味がわかってなかったので、理解しづらかったです。

amazonにログイン処理をするだけだと、ステートレスなレスポンスを送り、ログイン状態が維持できません。 HTTPのレスポンスには、ステートレスなリクエスト・レスポンスしかありません。 このログイン状態を維持するために生まれたのが、cookieです。

cookieにより、ログイン状態の維持でも大丈夫なのですが、自分のログイン情報が常にむき出しに晒されます。 悪意のある人なら、簡単に乗っ取ることができます。 なので、cookieの情報をデータベースに一時的に保存することを可能にしたのが、sessionです。 sessionに情報を渡すことで、データベース上に自分の状態を保持できるようになります。 amazonで本を購入するときにカートに入れて、後日ログインしてもカートに残ったままにできるのは、データベースに情報があるからです。 ただし、sessionに渡す情報で、機密性の高い情報を渡すのは危険です。 悪意のある方が(以下略・・・) そこで、基本的にはsessionに情報を渡すのは、cookieのidのみが好ましいです。 cookieの受け渡しだけをすることによって、大切なカート情報はデータベースに保存されることになります。

sessionというやり方がないと、安全なwebサービスが成り立っていなかったんですね。