こんにちは。
シルバーウィークも終わり、もう秋に突入しました。
待っていたよ!Autumn!
どうもハチマキです。
はじめに
Webエンジニアなら知っておくべきSessionとCookie。
そもそもちゃんと理解を深めていなかったので、今回勉強会に参加しました。
ここで個人的に学んだことを書いていこうと思います。
では早速行きましょう!
本日の概要 :Cookieとは?Sessionとは?なぜ必要なの?
Sessionとは?
Sessionを様々なサイトで調べてみると下記のような定義がされております。
- Webサイトにアクセスして行う一連の行動
- ブラウザからページを表示してブラウザを閉じるまでの間の行動
- 接続を確立してから切断するまでの一連の通信のこと
いわゆるアクセスしてからディスコネクトするまでの一連の行動/通信の管理をSessionというですね。
なぜSessionは必要なのか?
結論、複数(多数)のリクエストを同一ユーザと判断/認識するために必要なのです。
Webデータのやり取りは、クライアントとサーバーの1回のやり取りで処理が完結する、HTTPプロトコルを使用しています(クライアントとサーバー間のリクエストとレスポンス)
よって、サーバーは状態を管理/維持できず(ステートレス)、ユーザが送ったリクエストを覚えていないため、2回目以降リクエストを送っても同一ユーザからのリクエストなのかわからないという問題が発生します。
その問題を解決するために、クライアントに1つのセッションIDを振り、セッション中の管理を容易に行えるようにしています。
Cookieとは?
こちらも同様に定義を調べてみると、
- ブラウザ(クライアント側)に情報を保存するための仕組み
- Webサイトからスマホやパソコンに保存される情報
- アクセスしたウェブサイト(サーバ側)から作成されるファイルで、特定の情報をやり取りするファイル
いわゆるユーザとサーバ間でアクセス情報をやり取りするファイルをCookieというですね。
基本的にサーバがCookieを発行し、ユーザに渡す証明書みたいなものです(※クライアント側でも発行可能)
なぜCookieが必要なのか
結論、アクセスしたユーザの情報を保存し、通信がどのユーザからのものか、どういう状態にあるのかを認識するために必要なのです。
WebサイトではCookieを使用して、ユーザのログイン状態を維持したり、ユーザのサイトの利用設定を記憶したり、ユーザの地域に関連する情報を提供することで、オンラインでのユーザーエクスペリエンスを向上させています。
わかりやすい仕組みとしては、会員登録済みのサイトにアクセスした時に、IDやパスワードを事前にブラウザで保存しておけば、IDやパスワードがブラウザに表示されて簡単にログインできます。これもCookieの仕組みを利用したものです。
CookieとSessionの関係/違いとは?
結論:Sessionは目的で、Cookieは手段です。
具体的に言うと、Session(同一ユーザを認識したい)を実現するために、Cookie(ユーザとサーバ間でアクセス情報をやり取りするファイル)という手段を使っている。です!
ブラウザが持っているCookieをサーバに渡すことで、サーバがCookieを読み取り、ブラウザのリクエストがどのユーザからどのような状態できているのかを認識しています。
その他補足
- キャッシュとは?Cookieとの違いは?
CookieとSessionは、ユーザ情報を保存しているのに対し、キャッシュは表示の高速化のために情報を保存している。
キャッシュは、表示速度を上げることでユーザーを助け、CookieとSessionはユーザーの行動を覚えておくことで、機能のサポートをしてくれています。
- ローカルストレージとCookieの違い
どちらも概念的にはほぼ変わらないが、特徴が異なる。(ローカルストレージはCookieの後継的技術と言わ、Cookieとは違う特徴を持っている)
ローカルストレージとクッキーの違いは?ローカルストレージはどこで確認できるの?|スタビジ
- Sessionはセキュリティに気をつけろ!
セッションハイジャックなどの様々なサイバー攻撃が存在する(個別のセッションIDやcookieを使って「なりすまし」行為)
対応策の一例として、セッションIDの有効期限を短くすることで、IDが漏れても不正ログインを軽減できることや基本的にFWを使えば問題が発生しない仕様できていますが、理解を深め、よりセキュアなアプリケーションを開発することを意識する必要がある。
セッションハイジャックとは?その原因と対策を徹底解説
まとめ
今回大きく学んだことは、Sessionは目的でCookieは手段と言うことです。
Webアプリケーションはまだまだ奥が深い。。