2

「cookies」セクションのphpマニュアルには、cookie名に「[]」を追加するだけで1つのcookieに複数の値を追加できると記載されています。

最初、これについての私の理解は、次のことを行うことでした。

<?php
setcookie("[user1]", "bill");
setcookie("[user2]", "tom");

print_r($_COOKIE);
?>

そして、出力は次のとおりです。'配列()'空の配列を見た後、明らかに何かが正しくないことがわかりましたが、マニュアルに記載されている内容に従いました。そこで、ブラウザーで開発者モードに切り替えて、ブラウザーとサーバーのすべてのヘッダー情報を確認しました。

ブラウザとサーバーの両方に次のものがありました:[user1] = bill [user2] = tom

それでも$_COOKIE連想配列は空でした。つまり'Array()'

そこで、PHPマニュアルで、「外部ソースからの変数」セクションの1つのCookieに複数の値が格納される方法を調査して見つけました。

ここでは、これが正しく行われる方法の詳細な例を示します。上記の代わりに、次のように実行されます。

<?php
setcookie("Cookie[user1]", "bill");
setcookie("Cookie[user2]", "tom");

print_r($_COOKIE);
?>

上記のスクリプトの出力は次のとおりです。'Array([Cookie] => Array([user1] => bill [user2] => tom))'

私の質問は、最初の例ではCookieが登録されても印刷されないのに、2番目の(正しい)例では$ _COOKIE変数で印刷されるのはなぜですか?

4

1 に答える 1

4

あなたはそれを少し間違っています

 setcookie("Cookie[user1]", "bill");
 setcookie("Cookie[user2]", "tom");

これにより、値が格納されます。$_COOKIE スーパーグローバルを介してアクセスされる「Cookie」と呼ばれる Cookie 内の配列としての「tom」。次のようにアクセスする必要があります。

print_r($_COOKIE['Cookie']); // Cookie is the name you used above

もう一つの例:

setcookie("bob[user1]", "bill"); // cookie name is bob
print_r($_COOKIE['bob']); // Notice the cookie name is the key here

単一の Cookie 内に配列を格納する場合は、コンテンツをシリアル化することもできます。これにより、配列が文字列に変換されて Cookie 内に格納されます。データが必要になったときに元に戻すことができます。

$myArray = array(1,2,3,4);
setCookie('my_cookie', serialize($myArray)); // Store the array as a string
$myArray = unserialize($_COOKIE['my_cookie]); // get our array back from the cookie
于 2012-11-13T16:24:40.260 に答える