Подтвердить что ты не робот

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

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

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

Ответ 1

Сериализация данных:

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

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

$data = unserialize($_COOKIE['cookie'], ["allowed_classes" => false]);

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

Ответ 2

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

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

От 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();
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 скриптs as arrays but separate cookies are stored on the user system.

Ответ 3

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

С сайта PHP:

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

Недавно я создал этот код для моего клиента, я использую массив для cookie в этом коде, на самом деле этот код получает недавно просмотренные страницы пользователем с помощью файлов 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>";
} 
}

Ответ 8

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

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