Хранение массивов в файлах cookie

Мне нужно сохранить некоторые данные массива в файле cookie, и я изучал лучший способ сделать это, многие люди, кажется, говорят, что использование serialize – это путь, но затем в этом потоке:

PHP, как строчить массив и хранить в cookie

.. кто-то предложил использовать его как «serialize вызовет конструктор сериализованного класса. Это плохо, потому что это может привести к выполнению кода».

Так что мне интересно, какие у меня есть другие варианты? Как насчет base64_encode ?

Я не могу использовать sessions поскольку мне нужно сохранить данные ПОСЛЕ закрытия браузера; хотя я также беспокоюсь за ограничение Cookies 4KB .

FWIW Я храню данные корзины покупок того, что хранится в корзине someones, его нужно вернуть обратно в корзину, когда они вернутся.

Как создать уникальный идентификатор, сохранить его в файле cookie и сохранить ваш сериализованный массив и идентификатор в базе данных?

Пример:

 // ------------ STORING TO COOKIE AND DATABASE ------------ // $id = uniqid(); setcookie("id", $id, time()+60*60*24); // 1 day $serialized = serialize($array); mysql_query("INSERT INTO yourTable (id, array) VALUES ('$id', '$serialized')"); // ------------ SELECTING FROM DATABASE ------------ // if(!isset($_COOKIE['id'])) die(); $id = mysql_real_escape_string($_COOKIE['id']); $result = mysql_query("SELECT array FROM yourTable WHERE id = $id LIMIT 1"); if(!is_resource($result)) die(); $serialized = mysql_result($result, 0); $array = unserialize($serialized); 

Расширяя предыдущие комментарии и комментарии, вы должны очень стараться избегать хранения данных в cookie, в отличие от указателя на данные , например идентификатора строки базы данных.

Предполагая, что все клиенты являются врагами (что, по моему мнению, является разумным предположением), неправильный файл cookie – будь он вредоносным или просто багги – не сможет нанести большого вреда, если он содержит только указатель:

  • Неверно: отключите его.
  • Неверно: проверьте, сравнивая ID с пользователем, который запрашивает его; Если это так,
  • Действительно; используй это

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

Cookie – это не лучший способ сохранить пользовательские данные. Пользователи должны быть авторизованы на вашем сайте, и все данные должны храниться в базе данных user_id