クッキーとはウェブページを利用したときに、ブラウザとサーバーとの間で送受信したアクセス回数、利用履歴や入力内容などを、ユーザーのパソコンに保存する仕組みです。ユーザーのパソコンに保存されるので、ユーザー自身でクッキーを削除することが可能です。
Webデータのやり取りには、注)HTTPプロトコルが使用されていますが、HTTPプロトコルには、状態を保持する機能がありません。つまり、たった今ページにアクセスしたユーザと、次にアクセスしたユーザが同じであるか判断ができないのです。
それに対してクッキーは、ユーザ側のPCに保存され、各ユーザごとに固有の情報を持つので、連続してアクセスしているユーザや、頻繁にサイトを訪れているユーザの識別などに使うことができます。
プロトコルとは、ネットワークを介してコンピュータ同士が通信を行う上で、相互に決められた約束事の集合のことです。簡単に言えば、通信手順、通信規約のようなものです。英語しか使えない人と日本語しか使えない人では会話ができないように、対応しているプロトコルが異なると通信することができません。 HTTPプロトコルとは、WebブラウザとWebサーバ間で交わされるインターネットプロトコルのことです。
クッキーは、訪問者が複数のページを閲覧するときに、前のページで入力した情報などを引き継ぐために使用されます。
ユーザごとの訪問回数を表示するカウンターなどを作りたい場合もクッキーを使うと便利です。
WEB上の掲示板などで一度書き込みを行うと、その情報がクッキーに保存され、次回から名前やURLなどを再入力する必要がなくなります。
商品紹介ページと購入申し込みページが別々の場合に、どの品物をいくつ購入したのか、といった情報をクッキーに保存して受け渡します。クッキーを使って現在のカート内の商品などを保存し、多くの商品を一度に購入することができます。
PHPでは、setcookie()関数を使用して、クッキーを送信(クライアントのコンピュータに保存)します。クライアントにクッキーがセットされていなければ、新たに生成し、すでにクッキーがセットされていれば更新します。
<?php
if( isset( $_COOKIE[ "CountCookie" ] ) ) {
$count = $_COOKIE[ "CountCookie" ] + 1;
setcookie( "CountCookie", $count );
echo "あなたは" . $count . "回目の訪問です。";
} else {
$count = 1;
setcookie( "CountCookie", $count );
echo "はじめましてゲストさん!";
}
?>
上記のスクリプトでは、はじめにisset()関数で、クッキーの値が存在するか判別して、なければ変数$countに1を代入し、setcookie()関数を使用してクッキーをセットしています。
もし、クッキーの値が存在するなら、加算した値を変数$countに代入して、setcookie()関数を使用してクッキーをセットしています。その後アクセスする度に、クライアントから受け取った値を加算して更新します。
はじめましてゲストさん!
あなたは2回目の訪問です。
あなたは3回目の訪問です。
isset()関数は、引数に指定した変数が定義されているかどうか調べる関数のことです。
ただ値をセットしただけのクッキーは、ブラウザを閉じると消えてしまいます。そこで、セットしたクッキーの値を長期間保持させるために、クッキーの有効期限を指定します。
<?php
if( isset( $_COOKIE[ "CountCookie" ] ) ) {
$count = $_COOKIE[ "CountCookie" ] + 1;
// 5分(300秒)後まで有効
setcookie( "CountCookie", $count, time() + 300 );
echo "あなたは" . $count . "回目の訪問です。";
} else {
$count = 1;
// 5分(300秒)後まで有効
setcookie( "CountCookie", $count, time() + 300 );
echo "はじめましてゲストさん!";
}
?>
上記のスクリプトでは、time()関数で取得した現在の注)タイムスタンプをもとに、有効期限を指定しています。
time()関数は、現在時刻をUnixタイムスタンプとして取得します。Unixタイムスタンプとは1970年1月1日 00:00:00 GMTからの経過秒数です。PHP内部での日付や時刻の処理はUnixタイムスタンプで行われています。
PHPでは、どんな日付や時刻でもタイムスタンプという形式で認識します。タイムスタンプという値は「1970年1月1日 00:00:00 GMT」からの通算秒数、つまり「1970年になった瞬間から何秒経っているか」という秒数のことです。GMTというのはグリニッジ標準時のことです。
<?php
// クッキーの有効期限の記述式
if( isset( $_COOKIE[ "CountCookie" ] ) ) {
$count = $_COOKIE[ "CountCookie" ] + 1;
// 2015年2月10日まで有効
setcookie( "CountCookie", $count, mktime( 0, 0, 0, 2, 10, 2015 ) );
echo "あなたは" . $count . "回目の訪問です。";
} else {
$count = 1;
// 2015年2月10日まで有効
setcookie( "CountCookie", $count, mktime( 0, 0, 0, 2, 10, 2015 ) );
echo "はじめましてゲストさん!";
}
?>
上記のスクリプトでは、mktime()関数で、任意の有効期限を指定しています。
mktime()関数は、引数で指定した日時のタイムスタンプを取得します。
それでは最後に、setcookie()関数と、クッキーの有効期限の記述例についてまとめます。
setcookie ( name [, value [, expire [, path [, domain [, secure]]]]]);
| name | クッキーの名前 |
|---|---|
| value | クッキーの値。 |
| expire | クッキーの有効期限。 設定しない場合、クッキーはブラウザを閉じるときが有効期限となります。 |
| path | サーバー上でのクッキーを有効としたいパス。 |
| domain | クッキーが有効なドメイン。 |
| secure | 1をセットすると セキュアなHTTPS接続の場合にのみ、クッキーが送信されるようになります。デフォルトは0です。 |
| 1時間 | time() + 60 * 60 |
|---|---|
| 1日 | time() + 60 * 60 * 24 |
| 30日 | time() + 60 * 60 * 24 * 30 |
| 1年 | time() + 60 * 60 * 24 * 365 |