18

我希望从一些“虚拟”索引卡中存储一些数据。每张卡片有正反面,用户可以存储多张卡片。每一方都有数据。

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 中,请告诉我。请注意:不建议存储在数据库中,因为它不方便项目。:)

4

3 回答 3

46

使用json_encode/json_decode获取 / 设置 cookie 中的数组。

测试阵列

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

转换并写入 cookie

$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在引号之前添加\以逃避它们。如果你不摆脱那些,json_decode就会失败。


编辑二

将新卡添加到 cookie

  1. 如上加载数组
  2. $savedCardArray['CARD XX']=array('FRONT XX', 'BACK XX');
  3. 像上面一样保存数组,但现在当然$savedCardArray不是$cardArray.
于 2013-09-28T15:47:14.193 回答
3

序列化/反序列化作为 json_encode / json_decode 的更简单的替代品

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

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

于 2017-04-27T04:42:08.073 回答
1

玩这样的东西

<?php

$card_id = '123';
$value = 'im a black lady';

setcookie("card[$card_id][front]", $value);

// reload page to actually read the cookie

echo $_COOKIE['card'][$card_id]['front']; // im a black lady

?>
于 2013-09-28T15:38:49.057 回答