クッキーについて
そふぃのPHP入門 >> PHP実践リファレンス >> クッキー処理 >> クッキーについて

クッキーについて

クッキーとは

クッキーとはサーバからユーザのブラウザを通して送信され、ユーザのパソコンに記録させる事のできる情報です。ユーザ毎に固有の情報を持つ為、ユーザの識別などに使われたり、ユーザの好みの設定を保存しておくなどにも使われたりしています。

一例ですが、掲示板では名前やメールアドレスをクッキーで保存しておく事によって再訪問時にもう一度入力する手間を省く事ができます。さらに、ユーザごとの訪問回数を表示するカウンターなどを作りたい場合もクッキーを使うと便利です。

ユーザのブラウザを通して通信が行われるため、クッキーが有効かどうかはあくまでもユーザの設定に依存します。IE6をお使いの方は「ツール」→「インターネットオプション」→「プライバシー」でクッキーの設定を変えることができます。特定のサイトのみクッキーを許可したり、反対に特定のサイトのクッキーをブロックしたり、という事もできるようになってるハズです。

ブラウザがクッキー機能を有効にしている場合には、ブラウザからサーバへ保存されているクッキーが送信される仕組みになっています。送信されてきたクッキーを受け取るためにPHPでは$_COOKIEという連想配列が用意されています。連想配列なのでキーが必要ですがこれはもう少し後で説明します。

クッキーにはそれぞれ有効期限を設定する事ができ、有効期限を過ぎたクッキーは自動的に消滅します。

クッキーの制限

クッキーには悪用できないように多少の制限がかけられています。

まず、クッキー情報が保存されるのはユーザのパソコン内、と説明しましたが、どこに保存されるかはOSやブラウザに依存し、PHPスクリプト側で決定する事はできません。例えば、Windows2000以降でIEをお使いの場合は「C:\Document and Settings\ユーザ名\Cookies」になります。

また、保存できるのはテキストデータのみでバイナリデータ(画像などを扱えるデータ形式)は保存できません。

さらに、クッキーは保存したサーバだけに送られるようになっています。つまり、クッキーを送信したサーバを判断してそのサーバだけにクッキーを送るので、例えばAというサイトとBというサイトが同じクッキーを使用していたとしてもAにBのクッキー情報が送信される事はありません。

1つのクッキーに保存できるのは最大で4096バイト、1台のサーバが同じコンピュータに対して発行できるクッキーの数は20個という制限が設けられています。ここで注意しなくてはならないのは1つのサイトが20個使えるわけではない、という事です。最近では専用レンタルサーバ(ユーザ1人に1台のサーバを提供してくれるレンタルサーバ)なども増えてきていますが、専用サーバはお値段が大分高いのでww、大抵の人は共有サーバを使っているでしょう。そういった場合、1台のサーバ機を複数のユーザと共有しているわけですが、クッキーの個数の制限は「1台のサーバ」に対してカウントされます。この事は自分のサイトのお客さんが、自分とサーバを共有している誰かのサイトでクッキーをたくさんもらってる可能性もある、という事です。20個使えるからって全てを自分で使い切ってしまうのはお勧めできませんねww。

また、クッキーはHTTPヘッダの一部という扱いなのでクッキーを送信するのは他の全ての出力の前でなくてはなりません。極端な話、半角スペースなどの目に見えない文字でさえ出力されていてはいけません。当然HTMLタグもダメですし、<DOCTYPE~~>もダメです。つまり、クッキーは<DOCTYPE~~><html>を記述する前に送信しておかなくてはならないって事です。

HTTPヘッダ情報

さて、PHPの話から少しそれますが、HTTPヘッダについて軽く解説を加えておきます。通常ブラウザとサーバでのやり取りはリクエストとレスポンスという関係だけで成り立ってます。つまり「このファイルちょ~だ~い」というブラウザからのリクエストに対して、「指定されたファイルあったよ~、どうぞ~~」とレスポンスを返すサーバという関係です。

非常に極端な話としては、WebブラウザとWebサーバの主な関係というのはファイルのやり取りだけですね。んで、このやり取りの手段としてHTTPというプロトコルを使っているわけです。プロトコルの説明は本筋ではないのでしませんが、要は、通信手段を取り決めたルールです。数あるルールの中でWebサーバとWebブラウザはHTTPという通信ルール(プロトコル)に従ってやり取りしてるわけです。

そのプロトコルに従うためにHTTP通信ではリクエストを受けたファイル以外にも、ヘッダ情報と呼ばれる情報を勝手にひっつけて送ります。このヘッダ情報と呼ばれる情報の中にクッキーも含まれるわけですが、その他の情報としてはHTTPプロトコルのバージョンだとか、リクエストの成功/不成功やリクエストを受けたURIなどなど、WebブラウザとWebサーバが順調に通信するために必要そうな情報がたくさん詰まってます。

ちなみにヘッダ情報を勝手にひっつけて送るのはWebサーバだけでなく、Webブラウザの方も勝手にヘッダ情報を送ってます。お互いにヘッダ情報を送りあう事によってHTTP通信が無事にできるよーに工夫をしていると思ってもらえればいいかと思います。

HTTPに関しての詳細はW3CのHTTPプロトコルにある仕様書、RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1をご覧下さい。サイトがすべて英語ですので読むのに苦労しますがw、読みたかったら翻訳ソフトなどの使用をお勧めします。エキサイト翻訳あたりが有名です。