夢小説PHP その2:Cookieに配列

Cookieにユーザが入力した名前を配列の形で保存したい」ので、Cookieについて勉強。
PHPCookie、についての私の全知識は、「10日でおぼえるPHP5 入門教室」に取り上げられた(うちの一部)くらいなので、いろいろやってみます。

Cookieとは

Webサイトの提供者が、Webブラウザを通じて訪問者のコンピュータに一時的にデータを書き込んで保存させるしくみ。

Cookie(HTTP Cookie)とは - IT用語辞典

「10日間で〜」で知った範囲では、
一つの名前に一つの値を保存
してる感じがしました。
Cookieという塊の中に、たとえば"AAA"と言う名前の小部屋を作ってそこに任意の値を放り込んでる、というかんじ。
では配列だとどうなるか。"AAA"の中をさらに"1"、"2"、"3"……と区切って保存し、任意の時に取り出せるのか。

参考スクリプト

http://php.benscom.com/manual/ja/function.setcookie.phpにそのまんまなスクリプトがあったので、それを引用させていただきます。

<?php
// クッキーを設定します
setcookie("cookie[three]", "cookiethree");
setcookie("cookie[two]", "cookietwo");
setcookie("cookie[one]", "cookieone");

// ページを再読み込みした後に、表示します
if (isset($_COOKIE['cookie'])) {
    foreach ($_COOKIE['cookie'] as $name => $value) {
        echo "$name : $value <br />\n";
    }
}
?>

なお、

setcookie
クッキーを送信するネットワーク関数。
isset
変数がセットされているかどうかを検査する変数操作関数。NULLに設定されている変数を調べた場合FALSEを返す。
$_COOKIE
現在のスクリプトに HTTP クッキーから渡された変数の連想配列。スーパーグローバル。

とのことです。

    1. クッキーに配列を(連想配列で)送信
    2. スーパーグローバル$_COOKIEに変数がセットされているかどうかを検査
    3. 出力

というのがこのスクリプトの流れ。


これを一度実行し、再読み込みした結果が以下に。

three : cookiethree
two : cookietwo
one : cookieone

ちなみに一度目の実行では画面真っ白です。慌てず騒がずF5。……や、自分はあせってスクリプト見直しましたがw

参考スクリプトを改変

このスクリプトのsetcookie部分を以下のように改変。

<?php
// クッキーを設定します
for($i=0; $i<3; $i++){
	setcookie("cookie[$i]", "cookie".$i);
}

// ページを再読み込みした後に、表示します
if (isset($_COOKIE['cookie'])) {
    foreach ($_COOKIE['cookie'] as $name => $value) {
        echo "$name : $value <br />\n";
    }
}
?>

Cookieを設定する部分を、for文で回しただけですが。


結果↓

three : cookiethree
two : cookietwo
one : cookieone
0 : cookie0
1 : cookie1
2 : cookie2

改変前のと後のと、両方出力されてます。改変前のを実行した後Cookieを削除しなかったからでしょう。
ただ、同じ「cookie」というラベルだと、実行スクリプトが違っても同一の配列とみなされて値が保存されてた、と言うことでもあるので、一応コピペ。

というわけで。

Cookieに配列は格納できるよ! てことが判ったような気がします。
……べつにエントリ新たに建てるようなことではなかった気もしますが、やったからわかったってことで。