В "печеньках" можно оказывается хранить массивы! Хотя нет, правильнее будет наверное сказать так: "В куках можно представить данные таким образом, что их можно будет обрабатывать, как массивы".
Способ #1
Область применения: В моем случае, это позволит неавторизованным пользователям, т.е. гостям, добавлять товары в избранное. Cookies - оптимальный вариант. Однако, если посетитель добавит несколько товаров в избранное, то если мы сохраняем в куках ID товара, было бы удобно использовать обычный массив:
$products = ["1", "2", "3"];
Соответственно товары, у которых ID равен значениям 1, 2 или 3 - именно те, которые пользователь выбрал.
В куки нельзя напрямую добавить массив. Но можно сделать так:
$products = ["1", "2", "3"]; // Отправка cookie setcookie("products[1]", "product_id_1"); setcookie("products[2]", "product_id_2"); setcookie("products[3]", "product_id_3"); // После перезагрузки страницы, выведем cookie if (isset($_COOKIE["products"])) { foreach ($_COOKIE["products"] as $id => $val) { $id = htmlspecialchars($id); echo $id; // 1, 2, 3 } }
Думаю, будет логично, если ID будет именно ключем, а не значением. В таком случае значение $val не очень то и нужно, хотя туда можно запихнуть другую полезную информацию, например заголовок.
В таком случае удалить конкретный товар из избранного будет тоже предельно легко! Мы просто удаляем cookie, в которых ключ массива в products равен ID удаляемого товара.
Способ #2
$products = ["1", "2", "3"]; setcookie("products", json_encode($products)); if (isset($_COOKIE["products"])) { $products = json_decode($_COOKIE["products"]); foreach ($products as $id) { echo $id; // 1, 2, 3 } }
Способ #3
$products = ["1", "2", "3"]; setcookie("products", base64_encode(serialize($products))); if (isset($_COOKIE["products"])) { $products = unserialize(base64_decode($_COOKIE["products"])); foreach ($products as $id) { echo $id; // 1, 2, 9 } }