ブラウザと 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 関数 | そのまま送る |