Cookieについて

今日はCoookieについて勉強しました。

Cookieについて

サーバーは通常、クライアントからのほかのリクエストとは関係なしに個別にリクエストに応答する。サーバーはクライアントの状態を追跡する必要がないのでこのようなタイプの動作をステートレスという。

しかし、アプリケーションによってはクライアントに関する情報を一定期間サーバーで保持する必要がある。HTTP1.0も付加されるようになり、HTTP headerの中で送信され、webブラウザ内に保存される。

HTTPにはクッキーの使い方を定めた規則があり、クライアントがクッキーを返すことができるのは、クッキーの発行元に対してだけ。だが、バナー広告等をクリックすると、そのサーバーがクッキーを保持して、別のサイトのバナーにも同一のサーバー上にある為、ユーザーのクッキーが入った広告バナーを設置できます。GETリクエストのヘッダーにクッキーが含まれているので広告代理店側がそのクッキーを元にユーザーの情報を追跡できる。


クッキーの属性

Name クッキーに付ける任意の名前。 こちらだけが必須。その他は省略可能。

Comment サーバーがクッキーに追加するコメント。サーバーはこのコメントを利用してクッキーをどのように使うか説明することが出来る。クッキーを受け取るクライアントはこのコメント欄を調べて、操作が安全かどうか確かめることもできる。

Discard クライアントに対し、ユーザーが処理を終えた時にクッキーを破棄するよう指示する。クッキーをユーザーのディスクドライブに保存しないようにする。

Domain クッキーが有効になるドメインを指定する。

Max-Age クッキーの有効期限を秒単位で指定する。

Expires クッキーが切れる期限を日時で指定する。

Path クッキーの適用対象となるサーバー上のURLを指定する。

Port クッキーがで適用されるTCPポートのリストを指定する。

Secure クライアントに対し、リクエストがセキュアである場合のみ、クッキーを返すように指示する。具体的にはhttpsのみ。

Version クッキーが準拠するHTTP状態保持のバージョンを指定する。


実際にCookieを含んだレスポンスメッセージは以下のようなものである。

HTTP/1.1 200 OK Date: Thu, 12 Jul 2012 07:12:20 GMT Set-Cookie: visit=1; path=/; Secure=; expires=Sun, 22-Nov-12 14:12:20 GMT

で次からアクセスする時、Cookieの値を自動的に載せてリクエストする。 visit= の値が1づつアクセスする度に増えていく。


セッション管理について

Cookieを学ぶまで、リクエストとレスポンスはそれぞれ個別で対になっているものだと思っていたが、Cookieを使うことでセッション(一連の処理)として扱うことができるようになるとのこと。参考にした記事がかなりPHPに関しての記事が多く理解できているか微妙だが、

  • セッションはサーバー側で情報を保存し、クッキーはクライアント内で保存する。
  • PHPではsession_start()という風に記述する。
  • railsではCookieStore, Redis, ActiveRecord方式があるとのこと。

以上が今回自分が理解できたことです。 間違いも多々あると思うので気軽にコメント頂ければと思います。