クッキー(Cookie)とは?
一般的にクッキーといえば,サクサクとおいしい焼き菓子のことですが,インターネットの世界では別のものを指します。それは,Webサイトにアクセスしてきたユーザが使用しているWebブラウザに送信され,保存されるデータのことです。
はじめは「Netscape Navigator」というWebブラウザの独自な機能だったのですが,やがてRFC2965「HTTP State Management Mechanism」などの仕様が定められたことで,インターネット上の標準としての地位を確立し,ほぼすべてのWebブラウザでクッキーをサポートするようになりました。
PHPプログラムでは,Webブラウザとの間でこうしたクッキーのデータをやりとりすることができるようになっています。今回紹介するのは,その方法です。
クッキーの主な用途
クッキーが広く普及した理由は,初回のアクセス時にそれぞれのユーザに対して異なるデータを送信しておくと,次回からはクッキーの値を読み取ることで各ユーザに合わせた内容のWebページを表示させることができるためです。主なクッキーの用途を2つ紹介します。
(1)ログイン/ログアウト
典型的な例はログイン/ログアウトの制御です。Webサイトで会員登録をすると各ユーザごとに異なるIDが提供され,そのIDでログインすると,専用のWebページが表示されます。このようなしくみが実現できるのは,実はクッキーのおかげなのです。
ログイン時にWebブラウザへクッキーが送信するようにします。そうしておくと,次に同じユーザからアクセスされたときに保存されたクッキーをPHPプログラムで受信できますので,そのユーザがログイン中かどうかがを判断できます。ログアウトするときにはクッキーを削除します。これがログイン/ログアウトを実現するしくみです。
ところで,あなたがあるWebサイトにログインした後,しばらく席を外したとします。そして席に戻った後に再びアクセスしようとすると,「自動的にログアウトされました」と表示されることがあります。このような経験はないでしょうか。
実は,クッキーには有効期限があります。これを過ぎたものは,仮にデータを受信できても有効なものとはみなされません。そのため,席を外している間に有効期限が過ぎてしまうと,再びアクセスしてもクッキーが存在しないのと同じになります。ユーザがログアウト操作をしたわけではありませんので,「自動的にログアウトした」と判断するのです。
(2)アクセス追跡
ログイン/ログアウトをしなくても,クッキーがWebブラウザに送信されることがあります。それは,同じユーザがどのWebページを閲覧したのかを記録するためです。
名前や住所などが記録されるわけではありませんが,「あるユーザ」はどの時刻にアクセスを開始し,どの分野のコンテンツを閲覧したかという情報は,Webサイトをユーザに役立つものにするために重要な情報です。
このような情報を,たとえば通販サイトが利用すると,どのような商品を売り物として揃えれば良いかを知る手がかりをつかむことができるでしょう。最近では,アクセス追跡の情報を,ユーザがより強く関心を持ちそうな広告を表示させるために利用する例も増えています。
クッキーのデータをどのように利用しているかは,Webサイトの「プライバシーポリシー」などのページに掲載されていることがありますので,興味がある方は検索してみてください。
クッキーを送信する
前置きが長くなりましたが,PHPプログラムでクッキーをWebブラウザに送信する方法を紹介します。
PHPプログラムでクッキーを送信するにはsetcookie()関数を用います。
setcookie( 名前, 値, ... );
PHPマニュアルにもあるとおり,名前以外は省略可能ですが,Webブラウザにデータを保存したいときは,最低でも名前と値は記述することになります。名前は,後述するように受信の際に必要になります。値が日本語のときは,%xx%xx...という形式に変換して送信されます。
setcookie()をソースコードに記述するときは,リスト1に示すように,<?php ... ?>の前に空白などを設けず,かつHTMLタグよりも前の位置でなくてはなりません。なぜなら,HTMLタグなどの文字列の送信が始まってしまうと,クッキーの送信ができないからです。
リスト1 setcookie()はHTMLタグよりも前に記述する
<?php
// ..........
setcookie( 'CookieByPHP', 'クッキーの値' );
// ..........
?>
<html>
<!-- ..... コンテンツ ..... -->
</html>
送信されたクッキーがきちんと保存されているかどうかを確かめたいときは,Firefoxのようにクッキーの内容を表示できるWebブラウザを利用すると良いでしょう(図1)。また,Webブラウザでクッキーを受け付ける設定になっていないと,クッキーを送信してもデータが保存されませんので,あらかじめ設定を確認しておいてください。

