Задать вопрос
@Dreaded

Почему первый id записывается в куку сколько угодно раз?

Суть задачи записывать в куку просмотренные лоты на сайте, но только в том случае, если кука еще не содержит в себе id лота. То есть все id в куке должны быть уникальными.
У меня, почему-то уникальность соблюдается только для второго и последующих записей в куку. То есть если я с чистыми куками захожу на страничку с id=1, и нажимаю f5, то все обновления записываются в куку. Т.е. кука будет в себе содержать 1,1,1,1,1 и т.д. Но начиная со второго элемента условие уникальности уже соблюдается. Т.е. если после того как кука уже содержит 1,1,1,1,1 зайти на страничку c другим id , то он уже запишется в куку только один раз.
if(isset($_COOKIE['lot_history'])) {
        $lot_history = json_decode($_COOKIE['lot_history']);
        if (!(array_search($_GET['id']-1, $lot_history))){
            $lot_history[] = $_GET['id']-1;
            $lot_history = json_encode($lot_history);
            setcookie("lot_history", $lot_history, strtotime("+1 day"), "/");
        }
    }
    else {
        $lot_history = json_encode(array($_GET['id']-1));
        setcookie("lot_history", $lot_history, strtotime("+1 day"), "/");
    }
  • Вопрос задан
  • 88 просмотров
Подписаться 1 Простой Комментировать
Решение пользователя Arman К ответам на вопрос (3)
@Arik
Согласен с Максимом, но еще добавлю что куки имеют ограничения и после скорее всего nginx будет кидать 500 ошибку т.к. не может прочитать заголовки.

Как-то проще нужно
<?php
$maxHistory = 20;
$addId = $_GET['id'] - 1;

$lot_history = isset($_COOKIE['lot_history']) ? (array)json_decode($_COOKIE['lot_history']) : [];
$lot_history[] = $addId;
$lot_history = array_slice(array_unique($lot_history), -$maxHistory);

setcookie("lot_history", $lot_history, strtotime("+1 day"), "/");
Ответ написан
Комментировать