在 PHP Cookie 中存储和检索数组

2022-08-30 21:41:00

我希望存储一些来自“虚拟”索引卡的数据。每张卡都有正面和背面,用户可以存储多张卡片。每一方都有数据。

I ----------------- I I CARD 1 FRONT I I------------------I
I --------------- I I CARD 1 BACK I I-----------------I
I ----------------- I I CARD 2 FRONT I I------------------I
I --------------- I I CARD 2 BACK I I-----------------I

好吧,我的图表有点乱了。但你明白了。:)

从上图中想象一下。我想将每张卡的数据(正面和背面)作为数组(也许)存储在cookie中,然后能够将每个值拉回并在适用的情况下插入(在不同的页面上)。

同时,请记住,用户可以制作任意数量的卡。我无法使用 POST 或 GET 函数。数组位是有争议的,如果你能想到一种更简单的方法来将此数据存储在cookie中,请告诉我。请注意:不要建议存储在数据库中,因为这对项目来说并不方便。:)


答案 1

使用 / 获取 /设置 Cookie 中的数组。json_encodejson_decode

测试阵列

$cardArray=array(
    'CARD 1'=>array('FRONT I', 'BACK I'),
    'CARD 2'=>array('FRONT 2', 'BACK 2')
);

转换并写入饼干

$json = json_encode($cardArray);
setcookie('cards', $json);

保存的字符串如下所示

{"CARD 1":["FRONT I","BACK I"],"CARD 2":["FRONT 2","BACK 2"]}

拿回饼干

$cookie = $_COOKIE['cards'];
$cookie = stripslashes($cookie);
$savedCardArray = json_decode($cookie, true);

显示恢复的阵列

echo '<pre>';
print_r($savedCardArray);
echo '</pre>';

输出

Array
(
    [CARD 1] => Array
        (
            [0] => FRONT I
            [1] => BACK I
        )

    [CARD 2] => Array
        (
            [0] => FRONT 2
            [1] => BACK 2
        )

)

编辑
如果你想知道,那是因为保存的字符串实际上是stripslashes

{\"CARD 1\":[\"FRONT I\",\"BACK I\"],\"CARD 2\":[\"FRONT 2\",\"BACK 2\"]}

setcookie在 quoutes 之前添加以转义它们。如果你不摆脱那些,就会失败。\json_decode


编辑二

向 Cookie 添加新卡

  1. 加载数组,如上所述
  2. $savedCardArray['CARD XX']=array('FRONT XX', 'BACK XX');
  3. 如上所述保存数组,但现在当然不是。$savedCardArray$cardArray

答案 2

序列化/非序列化是json_encode/json_decode的更简单的替代方法

setcookie('cookiename', serialize(array), ...) 保存到 cookie.

array = unserialize($_COOKIE['cookienam']) 来检索数组。