2013-09-25 6 views
1

У меня есть сценарий, который должен устанавливать cookie. На веб-сервере он работает нормально, однако, когда я тестирую его локально, он не устанавливается.setcookie() не устанавливает cookie локально

Выдержка:

setcookie('sid', 'nv48thnuf39sonv', 0, '/', $_SERVER['HTTP_HOST']); 

echo isset($_COOKIE['sid']) ? $_COOKIE['sid'] : '(empty)'; 

Там нет выхода до вызова setcookie.

На сервере он сообщает (empty) о первой нагрузке и nv48thnuf39sonv на второй нагрузке (ожидаемое поведение). Via http://localhost/, однако, он говорит (empty) и никогда не меняется независимо от того, сколько раз я затормаживаю F5

Кто-нибудь знает, что может быть причиной того, что cookie не будет установлен?

+0

Почему бы вам даже не нужно '...«/», $ _SERVER [«HTTP_HOST»]) ; 'Их можно опустить, поскольку они имеют значение по умолчанию – Yang

ответ

0

Это ваш домен cookie.

Для этого требуется не менее двух точек (.), либо ваш браузер считает это недействительным, не сохраняя при этом cookie. Самый простой способ обойти это, чтобы просто установить домен куков в null, когда ваш $_SERVER['HTTP_HOST'] является локальным:

$cookieDomain = $_SERVER['HTTP_HOST'] == 'localhost' ? null : $_SERVER['HTTP_HOST']; 
setcookie('sid', 'nv48thnuf39sonv', 0, '/', $cookieDomain); 
echo isset($_COOKIE['sid']) ? $_COOKIE['sid'] : '(empty)'; 
+0

Это сработало отлично. Теперь я задаюсь вопросом, существует ли способ указать домен cookie для localhost, который будет работать? Я хотел бы развиваться локально и не должен полагаться на такой переключатель. –

+0

На самом деле я использую собственный домен под названием «dev.local», который я добавил в мои файлы хоста, чтобы он разрешался локально. Браузеры автоматически добавляют '.' к фронту, если домен плохой, поэтому, хотя это может не помочь' localhost', 'dev.local' превращается в' .dev.local', который является допустимым доменом cookie. – SamT

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