Хранение и извлечение массива в PHP файле cookie

Я хочу хранить некоторые данные из некоторых "виртуальных" карточек. Каждая карта имеет переднюю и заднюю стороны, и пользователь может хранить несколько карт. На каждой стороне будут данные.

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

Используйте 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 = $_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
        )

)

Edit
Если вы задаетесь вопросом о stripslashes, это потому, что фактически сохраненная строка

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

setcookie добавляет \ перед поисками, чтобы избежать их. Если вы не избавитесь от них, json_decode завершится с ошибкой.


Изменить II

Чтобы добавить новую карту в файл cookie

  • загрузить массив, как указано выше
  • $savedCardArray['CARD XX']=array('FRONT XX', 'BACK XX');
  • сохраните массив, как указано выше, но теперь, конечно, $savedCardArray, а не $cardArray.

Ответ 2

Serialize/Unserialize работает как более простая альтернатива json_encode/json_decode

setcookie ('cookiename', serialize (array),...) для сохранения в cookie.

array = unserialize ($ _ COOKIE ['cookienam]) для извлечения массива.

Ответ 3

Играйте с чем-то вроде этого

<?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

?>