2012-02-23 2 views
0

Я использую этот код для установки печенья, а затем увидеть, если они существуют

setcookie("token", "value", time()+60*60*24*100, "/"); 
setcookie("secret", "value", time()+60*60*24*100, "/"); 
setcookie("key", "value", time()+60*60*24*100, "/"); 

if (!isset($_COOKIE['token']) || !isset($_COOKIE['secret']) || !isset($_COOKIE['key'])) { 

// do something because one of the cookies were not set 

} 

Даже если все три из печенья были установлены в моем браузере, он по-прежнему работает if() заявления. Через процесс устранения я обнаружил, что средний файл cookie !isset($_COOKIE['secret']), по-видимому, вызывает оператор if(), хотя cookie secret был установлен в моем браузере. Сценарий говорит, что он не был установлен, когда я смотрю на свой браузер, и он был установлен. Можете ли вы подумать о какой-либо причине, почему php говорит, что он не был установлен?

+0

Ваш код работает для меня. блок выполняется при первом посещении, поскольку $ _COOKIE еще не заполнен вашими значениями из setCookie. при последующих вызовах блок больше не выполняется. у вас есть, случайно, установлен блокиратор файлов cookie? – Basti

+1

Какой инструмент вы используете, чтобы определить, существует ли этот файл cookie? Firebug? Кажется довольно странным ... –

ответ

0

использование

if(array_key_exists($_COOKIE, 'secret') && strlen($_COOKIE['secret']) > 0) { 
} 
+2

Это не отвечает на мой вопрос, почему не работает мой код? когда он работает для двух других файлов cookie. – Frank

+1

'array_key_exists ($ _ COOKIE, 'secret') === isset ($ _ COOKIE ['secret'])' и OP didn 'хотят проверить, было ли оно пустым. проблема все еще остается – Basti

+1

@Basti жаль, не то же самое, если array_key_exists проверяет, существует ли ключ, isset проверить, существует ли значение, когда значение равно null, isset вернет false. – silly

7

setcookie определяет только куки для отправки вместе с остальными заголовками HTTP, и они могут быть доступны на следующей странице загрузки с $_COOKIE. С вашим кодом заголовки HTTP не отправляются.

Вам нужно всего лишь setcookie, когда cookie не установлен. Нравится:

if (!isset($_COOKIE['token'])) { 
    setcookie("token", "value", time()+60*60*24*100, "/"); 
} 
+0

Итак, как это можно исправить? – Frank

+0

не используйте $ _COOKIE для хранения вашей информации. имеют разделенные переменные $ token, $ secret и $ key. и загрузите их значения из $ _COOKIE. если $ _COOKIE пуст, инициализируйте их вручную и вызовите setCookie. – Basti

+0

, или если у пользователя нет установленных файлов cookie, выполните 'setCookie' и снова переместите пользователя на тот же сайт с помощью' header() '. – Basti

Смежные вопросы