Мне нужно сохранить некоторые данные массива в файле 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 – будь он вредоносным или просто багги – не сможет нанести большого вреда, если он содержит только указатель:
Я предпочитаю молчаливое падение сообщений об ошибках, так как у меня возникает ощущение кишки, что это может усложнить для очень немногих действительно злонамеренных пользователей.
Cookie – это не лучший способ сохранить пользовательские данные. Пользователи должны быть авторизованы на вашем сайте, и все данные должны храниться в базе данных user_id