4

私は本当にこれを行う方法を理解していません

PHPマニュアルより

Cookie 名は配列名として設定でき、PHP スクリプトで配列として使用できますが、別の Cookie はユーザーのシステムに保存されます。

これは私には問題ありません。以下のように使用できます

setcookie("cookie[three]", "cookiethree");
setcookie("cookie[two]", "cookietwo");

しかし、この方法では複数の Cookie が作成されるため、これは望ましくありません

PHPマニュアルにも記載されています

複数の名前と値を持つ 1 つの Cookie を設定するには、explode() を検討してください。

しかし、explode を使用して 1 つの Cookie に複数の名前と値を設定する方法がわかりませんでした。

誰かこれを説明してください。

しかし、これを取得していません

4

3 に答える 3

3

Cookie は、愚かなキー/値ストレージ システムに他なりません。それはそれと同じくらい簡単です。

その上で、PHP が気の利いた機能を提供することがあります。PHP から Cookie を読み取るときに、名前に角括弧が含まれる形式の Cookie は、単一の配列変数に結合されます。しかし、それは唯一の例外であり、Cookie の動作には影響しません。あなたが言ったように、これは必要のない機能です。

とはいえ、Cookie の値は、テキストである限り、何でも書き込めるホワイトボードと考えるだけで十分です。また、配列などの特殊なものをプレーン テキストに変換できる PHP 関数が多数あります。

想像力を働かせれば完成です ;-)

更新:ちょっとした注意 —serialize()完全を期すために言及しましたが、コード インジェクションへの扉を開かないことを確認するのは非常に複雑になるため、おそらく努力する価値はありません。

于 2012-12-05T13:10:49.657 に答える
-1

次のように Cookie を設定できます。

setcookie("cookiename", "value1;value2;value3;value4");

次に、次のように爆発を使用します。

$a = explode(';', $_COOKIE['cookiename']);

次に、1 つの Cookie から値の配列を取得します。

また、ドキュメントの次の文で、これを行うべきではないと言っています。

setcookie("cookiename", serialize( array("value1", "value2", "value3") );
// next request
$a = unserialize($_COOKIE['cookiename']);

ユーザーがクッキーを配列以外の値に変更できるため、安全ではないためです。

于 2012-12-05T12:47:50.260 に答える
-1

シリアライズとアンシリアライズを使用する

元 :

$ckArr= array();
        $ckArr['abc'] = "abc";
        $ckArr['xyz'] = "xyz";
        $ckArr['pqr'] = "pqr";

        $ckStr= serialize($ckArr);
        setcookie("mycookie", $ckStr, $time, $servername);

そして、次を使用してシリアル化を解除できます。

$cookieContent = unserialize($_COOKIE['mycookie']);

print_r($cookieContent);
于 2012-12-05T12:51:21.400 に答える