Cookie

mastrelelik

Новичок
Столкнулся с необъяснимой проблемой:
если устанавливать куке конкретное статическое значение, то все ок, а если через переменную, то кука не устанавливается
Вот так работает:
$time=time()+60*60*24*3;
setcookie("banner", 177, $time, "/", $_SERVER["HTTP_HOST"]);

А вот так уже не работает
$id=180;
setcookie("banner", $id, $time, "/", $_SERVER["HTTP_HOST"]);

Если во второй строке $id заменю на само число, то кука станет=180

В чем может быть причина?
 
Последнее редактирование:

mastrelelik

Новичок
Приведите конкретный рабочий код.
Небольшая вводная перед кодом - это баннерная карусель, которая показывает конкретному посетителю по порядку все баннера
$ListBanners - хранит все активные баннера

Код:
$flag=1; $flag_first=1; // $flag_first - нужен, если пользователь впервые на сайте, то ему отобразим самый первый баннер из массива, айди которого $ListBanners[0]["id"]
$time=time()+60*60*24*3; // храним куку три дня
foreach ($ListBanners as $key => $value)
{
   if ($value["id"]==$_COOKIE["banner_id"]) // если этот баннер уже был показан пользователю, то надо найти айди следующего баннера
   {
       $next_id=intval($ListBanners[$key+1]["id"]);
       if ($next_id) // если баннер не последний в массиве, то $next_id не ноль
       {
           setcookie("banner_id", $next_id, $time, "/", $_SERVER["HTTP_HOST"]);
           $flag=0; $flag_first=0;
           break; // выходим из цикла
       }
       else $flag=1;
   }
}
if ($flag || $flag_first) // если пользователь первый раз на сайте или дошел до конца всего массива, то показываем первый баннер
{
   setcookie("banner_id", $ListBanners[0]["id"], $time, "/", $_SERVER["HTTP_HOST"]);
}
P.S. если подскажите, как тут в редакторе отформатировать код с отступами, то смогу отредактировать, чтоб было нагляднее
 
Последнее редактирование:

mastrelelik

Новичок
2AnrDaemon

Вынес этот кусок кода в отдельный файл - все прекрасно работает, значит проблема не тут.
Хотя все равно странно такое поведение, если бы впереди были какие то хэдеры или еще что-то что мешает кукам, то тогда бы вовсе куки не обновлялись. Но ведь просто число меняет ей значение...
 

AnrDaemon

Продвинутый новичок

AnrDaemon

Продвинутый новичок
Вообще, у вас в коде куча предположений и допущений.
Не удивлюсь, если в действительности всё не так, как на самом деле.
 

mastrelelik

Новичок
Вам никогда не говорили, что нельзя верить пользовательскому вводу?…

А если последний - ошибка выполнения.
Если $next_id==0, то ошибки не возникнет, мы переместимся сюда
if ($flag || $flag_first) {......}

Насчет первого, да согласен, заменю на название домена.
 

AnrDaemon

Продвинутый новичок
Я вообще-то о предыдущей строке.

Не на название домена, а на $_SERVER["SERVER_NAME"] - обычно туда передаётся истинное имя сервера от http демона.
 
Сверху