Help us understand the problem. What is going on with this article?

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

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

これらは単に動かすだけではなく、よりユーザービリティを上げるためにはどうすれば良いかを考える施策になります。
なので、単に書くだけではなく、このようなところにも注意を配れるようになっていきたいと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away