解 説

クッキー(cookie)とは

クッキーの語源から考察

RFC 6265などで定義されたHTTPにおけるウェブサーバとウェブブラウザ間で状態を管理するプロトコルです。
cookie
語源はお菓子のクッキーです。なぜクッキーかというと、fortune cookie説(おみくじ)、クッキーベア説(ゴッドファーザーのアンディー・ウイリアムス)、チルチルミチル説(パンくずリスト的に)など色々いわれています。それぞれの逸話をよくみてみるとその性格が浮かび上がってきます。

fortune cookie説はクッキーの中におみくじが入っています。クッキーを食べると毎回違うメッセージが入っていることがcookieの役割と似ているからとする説です。なんだか今使われているcookieと少し用途が違うようですが、当初はサーバーとクライアント間でメッセージをやりとりする仕組みで使われていたようです。ちなみにfortune cookieは日本生まれの新潟の辻占煎餅が起源とか。

2012
クッキーベア説はIBMのあるオペレータがホストコンピュータから気まぐれに端末をロックアウトして、そのユーザーたちに「クッキーおくれよ」とメッセージを送り、ユーザーに ‘cookie’ と入力させるお遊びをしていたとか。その様子が当時の人気バラエティ番組の「クッキーベア」を連想させたのでクッキーベアです。一度設定されたクッキーは、条件を満たす限り何度でも要求に組み込まれるという点で似ているのでしょうかね。

チルチルミチル説は目印にクッキーを砕いた破片を要所要所に置いたからだという説。それはパンくずリストでは?と思いますが、確かにブラウザにクッキーを置いて目印にするという点ではありのような気もします。

どうやら語源は定かではないようですが、なんとなく言わんとすることがわかるような気もしますね。

cookieの使われ方

  1. cookieのデータはWebサーバーでレスポンスヘッダに埋め込んで、ユーザーに送信します
  2. 送られたcookieデータはブラウザが保存します
  3. cookieのフィールドの中には、どのページへのリクエストの際にそのcookieを再送信するのかという情報を示すデータがあります
  4. 次のリクエストの際cookieに情報があれば自動的に送られます
  5. Webサーバーはcookieの値に応じた表示をします

cookieはサーバー側からクライアントのブラウザに簡単なデータを保存しておく仕組みです。
サーバーは勝手にクライアントのデータを読み書きできませんが、cookieの仕組みを使えばクライアントのブラウザにデータを保存することができます。

cookieの設定

その方法はレスポンスヘッダにcookie用のデータをsetcookie()を使用して埋め込み、クライアントのブラウザに送信して保存します。保存できるデータサイズは4kBです。(半角英文字で約4000字程度)
このデータはユーザーが変更や削除など自由にできます。盗聴の恐れもありますので重要な内容は絶対に保存しないようにしましょう。
setcookie()の使い方

bool setcookie( string クッキー名 [, string クッキー値 [, int 有効日時 [, string パス [, string ドメイン [, bool SSLフラグ [, bool $httponly = false ]]]]]] )

この例では第1引数にcookieの名前、第2引数はこのcookieに関連付ける任意の文字列、第3引数は有効期限、第4引数はクッキーを有効にしたいパスを指定、第5引数はクッキーを有効にするドメイン、第6引数は1を指定するとSSL接続の時(HTTPS接続時)のみクッキーが送信されるようになります。デフォルト値は0です。第7引数はTRUE を設定すると、HTTP を通してのみクッキーにアクセスできるようになります。 つまり、JavaScript のようなスクリプト言語からはアクセスできなくなるということです。既定値はfalseです。
第1引数以外は省略が可能です。

cookieの取得

書き込んだCookieを読み出すにはスーパーグローバル変数の $_COOKIE を参照します。
$_COOKIE は $_POST や $_GET と同様、PHPが自動的に値をセットしてくれる連想配列です。

cookieを使用したカウンターの例
サンプル

ブラウザでcookieの編集

ブラウザからcookieを編集する方法ですが、ブラウザの種類やバージョンでさまざまです。
Firefoxの35.0.1バージョンのものを例に紹介します。
Firefoxでcookieを操作するには「Firebug」を使用するのが簡単です。
「Firebug」のcookieのタブを開いて目的のcookieを探します。
co2
目的のものが見つかったなら右クリックのメニューから編集を選びます。
co1
出てきた上記画像のようなボックスから目的の値を編集します。

cookieとセッションの違い

セッションはその値をスーパーグローバル変数の$_SESSION[]に入れてサーバに保存しています。
ページの表示が完了してもセッション有効期間は値を保持します。

cookieはその値をローカルマシンに保持します。またブラウザの環境に依存します。
ページの表示が完了してもcookie有効期間は値を保持します。