8 ответов:
сериализовать данные:
setcookie('cookie', serialize($info), time()+3600);потом данные восстановить:
$data = unserialize($_COOKIE['cookie']);после данных $info и $data будут иметь одинаковое содержимое.
чтобы сохранить значения массива в cookie, сначала вам нужно преобразовать их в строку, поэтому вот несколько вариантов.
хранение файлов cookie в формате JSON
хранение код
setcookie('your_cookie_name', json_encode($info), time()+3600);чтение кода
$data = json_decode($_COOKIE['your_cookie_name'], true);JSON может быть хорошим выбором также, если вам нужно прочитать cookie в интерфейсе с JavaScript.
на самом деле вы можете использовать любой
encrypt_array_to_string/decrypt_array_from_stringгруппа методов, которая преобразует массив в строку и преобразовать строку то же самое массив. Например, вы также можете использоватьexplode/implodeдля массива целых чисел.Предупреждение: Не используйте сериализовать/восстановить
От PHP.net
Do not pass untrusted user input to unserialize().- все, что приходит по HTTP, включая куки, не заслуживает доверия!ссылки, связанные с альтернативное решение, вы можете сделать это и без преобразования массива в строку.
setcookie('my_array[0]', 'value1' , time()+3600); setcookie('my_array[1]', 'value2' , time()+3600); setcookie('my_array[2]', 'value3' , time()+3600);и после если вы будете печатать
$_COOKIEпеременная, вы увидите следующееecho '<pre>'; print_r( $_COOKIE ); die();Array ( [my_array] => Array ( [0] => value1 [1] => value2 [2] => value3 ) )это документированная функция PHP.
От PHP.net
Cookies names can be set as array names and will be available to your PHP scripts as arrays but separate cookies are stored on the user's system.
используя сериализовать и восстановить на печенье-это риск для безопасности. Пользователи (или злоумышленники) могут изменять данные cookie, когда вы восстановить его, он может выполнить PHP-код на сервере. Данные Cookie не должны быть доверенными. Вместо того, чтобы использовать JSON!
с сайта PHPs...
не передать ненадежные входные данные пользователя, чтобы восстановить(). Несериализация может привести к загрузке и выполнению кода из-за создания экземпляра объекта и автоматической загрузки, и злоумышленник может использовать это. Используйте безопасный, стандартный формат обмена данными, такой как JSON (через json_decode() и json_encode ()), если вам нужно передать сериализованные данные пользователю.
попробовать
serialize(). Он преобразует массив в строковый формат, вы можете использоватьunserialize()чтобы преобразовать его обратно в массив. Скрипты, такие как WordPress, используют это для сохранения нескольких значений в одном поле базы данных.вы также можете использовать
json_encode()Как сказал Роб, что может быть полезно, если вы хотите прочитать куки в javascript.
Cookies-это в основном текст, поэтому вы можете хранить массив, кодируя его как строку JSON (см.
json_encode). Имейте в виду, что существует ограничение на длину строки, которую вы можете хранить.
вы также можете попробовать написать разные элементы в разных файлах cookie. Имена файлов cookie могут быть установлены как имена массивов и будут доступны для ваших PHP-скриптов в виде массивов, но отдельные файлы cookie хранятся в системе пользователя. Рассмотрим explode (), чтобы установить один файл cookie с несколькими именами и значениями. Не рекомендуется использовать serialize () для этой цели, поскольку это может привести к дырам в безопасности. Посмотри на setcookie PHP функция для более подробной информации
недавно я создал этот код для моего клиента, я использую массив для куки в этом коде, на самом деле этот код получает недавно просмотренные страницы пользователем с помощью куки, надеюсь, что это поможет вам...!
function curPageURL() { // get url return 'http' . (( !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443 ) ? 's' : '') . '://' . $_SERVER['SERVER_NAME'] . ( $_SERVER['SERVER_PORT'] == 80 ? '' : $_SERVER['SERVER_PORT'] ) . $_SERVER['REQUEST_URI']; } $currentPage = curPageURL(); // call function $counter = $_COOKIE['_counter']; // set counter variable if(!$_COOKIE['_PAGES']){ // if _Pages cookie $default = 1; // set default value to 1 setcookie("_counter",$default,time()+7200); // set counter cookie setcookie("_PAGES[$default]",$currentPage, time()+3600); // set cookie } else{ // if ! _Pages cookie $default = $counter+1; // set default value to +1 setcookie("_counter",$default,time()+7200); // set counter cookie } if(@in_array($currentPage, @$_COOKIE['_PAGES'])){ // if same url found } else{ // if new url found setcookie("_PAGES[$default]",$currentPage, time()+3600); // set cookie } if($_COOKIE['_PAGES']){ foreach ($_COOKIE['_PAGES'] as $value){ echo "<a href='{$value}'>{$value}</a>"; } }
просто нашел то, что нужно. Теперь я могу хранить продукты, посещенные на cookies, и показывать их позже, когда они вернутся на сайт.
// set the cookies setcookie("product[cookiethree]", "cookiethree"); setcookie("product[cookietwo]", "cookietwo"); setcookie("product[cookieone]", "cookieone"); // after the page reloads, print them out if (isset($_COOKIE['product'])) { foreach ($_COOKIE['product'] as $name => $value) { $name = htmlspecialchars($name); $value = htmlspecialchars($value); echo "$name : $value <br />\n"; } }

Comments