Массивы в файлах cookie PHP

Как правильно хранить массив в cookie? в примере PHP-кода:

$number_ticket=2; $info[7][5]=1; $info[8][5]=1; 

Сериализовать данные:

 setcookie('cookie', serialize($info), time()+3600); 

Затем несериализуйте данные:

 $data = unserialize($_COOKIE['cookie']); 

После данных данные $ info и $ будут иметь одинаковый контент.

Чтобы сохранить значения массива в 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 методов encrypt_array_to_string / decrypt_array_from_string которая будет преобразовывать массив в строку и преобразовывать строку обратно в тот же массив. Например, вы также можете использовать explode / implode для массива целых чисел.

Предупреждение. Не используйте сериализацию / несериализацию

От PHP.net

введите описание изображения здесь

Do not pass untrusted user input to unserialize(). – Все, что поступает от HTTP, включая файлы cookie, недостоверно!

Ссылки, связанные с безопасностью

В качестве альтернативного решения вы можете сделать это и без преобразования массива в строку.

 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(); 
  массив 
  (    
      [my_array] => Массив 
          ( 
              [0] => значение1 
              [1] => значение2 
              [2] => значение3 
          ) 

  ) 

Это документированная функция 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.

Использование serialize и unserialize для файлов cookie – это риск для безопасности. Пользователи (или злоумышленники) могут изменять данные cookie, а затем, когда вы несериализуете его, он может запускать PHP-код на вашем сервере. Данные cookie не следует доверять. Вместо этого используйте JSON!

С сайта PHP …

Не пропускайте недоверенный ввод пользователя в unserialize (). Несериализация может привести к тому, что код загружается и выполняется из-за экземпляра объекта и автозагрузки, и злоумышленник может воспользоваться этим. Используйте безопасный стандартный формат обмена данными, такой как JSON (через json_decode () и json_encode ()), если вам необходимо передать сериализованные данные пользователю.

Попробуйте serialize() . Он преобразует массив в строковый формат, затем вы можете использовать unserialize() для преобразования его в массив. Сценарии, такие как WordPress, используют это, чтобы сохранить несколько значений в одном поле базы данных.

Вы также можете использовать json_encode() как сказал Роб, что может быть полезно, если вы хотите прочитать куки-файл в javascript.

Файлы cookie – это в основном текст, поэтому вы можете сохранить массив, закодировав его как строку JSON (см. json_encode ). Имейте в виду, что существует ограничение на длину строки, которую вы можете сохранить.

Вы также можете попытаться написать разные элементы в разных файлах cookie. Имена файлов cookie могут быть заданы как имена массивов и будут доступны для ваших PHP-скриптов в виде массивов, но отдельные файлы cookie хранятся в системе пользователя. Рассмотрим explode (), чтобы установить один файл cookie с несколькими именами и значениями. Для этой цели не рекомендуется использовать serialize (), поскольку это может привести к появлению защитных отверстий. Посмотрите на функцию setcookie PHP для более подробной информации.

недавно я создал этот код для своего клиента, я использую массив для cookie в этом коде, на самом деле этот код получает недавно просмотренные страницы пользователем с помощью куки-файлов, надеюсь, что это поможет вам …!

 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>"; } } по 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>"; } } по 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>"; } }