2012-01-30 4 views
1

В моем коде (тестирование на моей локальной машине с доменом localdev.xxx.com) Я использую следующий код для установки куки в браузере, который истекает через 6 месяцев времени:Почему файл cookie истекает немедленно?

$cookieExpiresOn = time() + (60 * 60 * 24 * 184); 
setcookie("ref", "somevalue", $cookieExpiresOn); 

однако, когда я проверить ответ HTTP, используя поджигатель заголовок Set-Cookie имеет даты, установленной на 1 января 1970 года

Set-Cookie: ref=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; 

не time() функция должна возвращать текущую дату и время с момента Unix Epoch время? Почему это происходит?

+3

Вы положили «ref = deleted»? В вашем примере кода вместо него указано «somevalue». Может быть, более поздняя строка кода переустанавливает файл cookie? – Thilo

+0

просто быстрый тест: измените ref на _ref и посмотрите, не перезаписывается ли его набор, всегда возможность где-то еще в вашем приложении ref. –

+0

Функция time() иногда немного причудлива. Иногда выполнение time() + независимо и определение его внутри переменной будет работать, иногда он не будет быстро работать вокруг kinda, определяет time() как свою собственную переменную, а затем делает вашу математику к ней на следующей строке ... Также просто дважды проверьте, что ваш cooieExpiresOn действительно есть, может быть, его номер выходит за пределы диапазона, и, таким образом, он вызывает defualt к чему-то, что есть, но не работает. – chris

ответ

5

Обнаружена проблема. В моем фактическом коде значение было установлено время через переменную так:

setcookie("ref", $varx, $cookieExpiresOn); 

Очевидно, если значение куки является пустой строкой, то PHP пытается удалить куки, установив дату его истекать раньше текущего времени по Гринвичу.

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