Невозможно установить cookie, если он еще не существует в PHP - PullRequest
0 голосов
/ 09 февраля 2011

Я пытаюсь установить cookie для сайта, если он не существует.Это не работает.

if(isset($_COOKIE['about'])){
  $_COOKIE['about'] += 1;
}
if(!isset($_COOKIE['about'])){
  setcookie("about", 1, time()+3600);
}

Я также пытался

if(empty($_COOKIE['about'])){ 
  setcookie("about", 1, time()+3600);
}

Ответы [ 3 ]

4 голосов
/ 09 февраля 2011

Суперглобальный $_COOKIE доступен только для чтения значений из.Запись в него не обновляет cookie, так как для этого требуется, чтобы новый заголовок Cookie был отправлен в браузер.Вероятно, вам лучше будет обслуживать сеансов , поддерживаемых файлами cookie, поскольку PHP позволяет изменять сеанс без явного сохранения / настройки файла cookie.

2 голосов
/ 09 февраля 2011

Вы можете только читать материал из $_COOKIE superglobal, попробуйте установить его нормально:

setcookie("about",$_COOKIE['about']+1,time()+3600);

Итак, все вместе:

if(isset($_COOKIE['about'])){
   $_COOKIE['about'] += 1;
}else{
   setcookie("about", 1, time()+3600);
}

Обратите внимание на else , который вы ранее проверяли, если cookie-файл установлен, поэтому нет необходимости проверять снова, как есть, так и нет.

1 голос
/ 09 февраля 2011

Убедитесь, что вы еще не отправили пользователю никакой информации, поскольку вызов setcookie является просто псевдонимом header() (но с определенной схемой, которой необходимо следовать).Возможно, вы отключили вывод ошибок и пропустили сообщение, поэтому оно работает, но в фоновом режиме происходит сбой.

setcookie должен быть одним из первых вызовов на вашей странице, начиная с начала сеансаи установка header.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...