ブラウザと Web サーバの情報共有に利用される cookie ですが、ここでは配列で cookie の送受信を行うサンプルコードを掲載しています。
スポンサーリンク
cookie を配列で送受信する
cookie はキー・バリュー形式で保存されていますが、1 つのキーに対して複数の値を持たせたいケースでは cookie 名を配列のように指定することができます。下記のサンプルを参照ください。
// 送信するcookieの値
$value1 = 'strong1';
$value2 = 'strong2';
$value3 = 'strong3';
/*
* cookie を配列で送信する
*/
setcookie("ArrayCookies[one]", $value1);
setcookie("ArrayCookies[two]", $value2);
setcookie("ArrayCookies[three]", $value3);
/*
* 受信した Cookie を取得する
*/
if (isset($_COOKIE['ArrayCookies'])) {
foreach ($_COOKIE['ArrayCookies'] as $name => $value) {
$name = htmlspecialchars($name);
$value = htmlspecialchars($value);
echo "$name : $value \n";
}
}
結果(見易さのため、一部表示結果は加工している)
---------------------------------------------------
one : strong1
two : strong2
three : strong3
配列のイメージ('[‘ と ‘]’ で囲む)でキーを設定して、それぞれ値を設定しています。実際には PHP は個別のクッキーを送信していますが、cokkie 受信時にキー名を元に配列を構築し、プログラムでは配列アクセスできるようにしています。以下のような setcookie 関数をラップした setcookies 関数を作成しても良いかもしれません。
/*
* cookie を配列で設定する
*/
function setcookies($name, array $values, $lifetime)
{
foreach ($values as $key => $value) {
setcookie($name . '[' . $key . ']', $value, time() + $lifetime);
}
}
/*
* 使用方法
*/
$lifetime = 600; // 削除したい場合はマイナス値を設定する
$cookiename = 'arraycookie'; // cookie 名
$values = array('key1' => 'value1', 'key2' => 'value2'); // 値
setcookies($cookiename, $values, $lifetime);
cookie を削除する
上記サンプルでは配列のように cookie を送受信しましたが、cookie を削除するときはあくまでも 1つずつ削除する必要があります。上記のようにラップ関数を作成しても良いでしょう。なお、cookie を削除するには有効時間を過去時間にしてブラウザに通知します。
// cookie を削除する
setcookie("ArrayCookies[one]", null, time() - 600);
setcookie("ArrayCookies[two]", null, time() - 600);
setcookie("ArrayCookies[three]", null, time() - 600);
setcookie 関数と setrawcookie 関数の違い
cookie を送受信する関数には setcookie 関数の他に setrawcookie 関数があります。両者の違いは下表の通りです。
| setcookie 関数 | URLエンコードした値を送る |
|---|---|
| setrawcookie 関数 | そのまま送る |