Posted at

cookieとsessionのお話

More than 1 year has passed since last update.


cookieとは

セキュリティ用語集 - Cookie とは?

Cookie は、ユーザー設定についての情報を保持するために、Web サイトによってユーザーの PC に保存される小さなファイルです。Cookie を使用して、サイトにユーザーの個人設定を記憶させたり、サイトにアクセスする際のサインインを省略可能にしたりして、利便性を向上させることができます。しかし、一部の Cookie は、ユーザーがアクセスするサイトを追跡してプライバシーを侵害するおそれがあります。

~~マイクロソフトより

だそうです。

つまり、ユーザがサーバに対して、何かしらリクエストをした際にレスポンスと同時に返してくれる、一連の情報です。

その中にユーザーの情報(例えばsession_idなど)が含まれています。

これを使うことで、ユーザーは次回ログインする際に、自動的にidを入れてくれたり、何なら自動ログインもしてくれたりします。

スクリーンショット 2018-08-27 17.47.40.gif

                   ↑↑

レスポンスするタイミングでcookie情報もブラウザに渡す


cookieを扱う際の注意点的な話(dbで対応)

こんな便利なcookieですが、扱う上では工夫したり、対策する必要もあります。

もちろん下の例以外にもいろんなパターンがあると思いますので、これから調べていきたいと思います。


ユーザーの利便性を高める

サーバーを複数台利用する際を考えます。大きなサービスになってくると、このように複数台になることがあります。

スクリーンショット 2018-08-27 22.12.13.gif

図の中央にあるロードバランサーは、負荷分散システムであり、一つのサーバーに負荷が集中することを防ぎます。

普通であれば上の節で話したように、リクエストを出してレスポンスがくるタイミングでcookieが保存されるため、一つのwebサーバではcookieが使えます。しかし、複数のwebサーバを利用している場合は、一つのwebサーバにcookie保存できても、もう一つのサーバーにはcookieが保存できていないという現象が起こり得ます。そうなると、以前ログインしたのに、cookieが保存されておらず、再度ログインしなければならないということになります。

なので。。。。

スクリーンショット 2018-08-27 22.14.32.gif

db(例ではredis)を用意して、cookie情報を統一することができます。そうすればたとえ、一つのサーバにしかログインしていなくても、もう一つのサーバにアクセスした際にしっかりログインした動作を行うことができます。


セキュリティを強化する

次はセキュリティの話です。有名どころで言えばセッションハイジャックなどがこのcookieには関わって来ます。

cookieの中にはsession_idというidがあり、それを利用して、「このユーザーは以前この操作をしたユーザーだ」ということがわかるようになります。

しかし、このsession_idを盗み出すことで、その人になりすますこともできます。

なので、session_idやそれに紐づくカラムをredisに保存することでそのような攻撃を防ぐことができます。

スクリーンショット 2018-08-27 22.29.39.gif


より良いサービスのために

これらは単に動かすだけではなく、よりユーザービリティを上げるためにはどうすれば良いかを考える施策になります。

なので、単に書くだけではなく、このようなところにも注意を配れるようになっていきたいと思います。