Массивы в 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
Do not pass untrusted user input to unserialize().
- все, что приходит по HTTP, включая cookies, не является надежным!
ссылки, связанные с альтернативное решение, вы можете сделать это и без преобразования массива в строку.
и после, если вы напечатаете это документированная функция PHP. От PHP.netsetcookie('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
)
)
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";
}
}