Массивы в cookies PHP

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

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

8 ответов


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

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

потом данные восстановить:

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

после данных $info и $data будут иметь одинаковое содержимое.


чтобы сохранить значения массива в cookie, сначала вам нужно преобразовать их в строку, поэтому вот некоторые параметры.

хранение cookies как 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

enter image description here

Do not pass untrusted user input to unserialize(). - все, что приходит по HTTP, включая cookies, не является надежным!

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

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

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


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

вы также можете использовать json_encode() Как сказал Роб, что может быть полезно, если вы хотите прочитать cookie в javascript.


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


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


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

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