В "печеньках" можно оказывается хранить массивы! Хотя нет, правильнее будет наверное сказать так: "В куках можно представить данные таким образом, что их можно будет обрабатывать, как массивы".


Способ #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
    }
}