2010-12-30 3 views
0

Вот простая функция, что я использую:Проблема с обнаружением печеньем в PHP

public function control() { 
    $string = 'lolcheck'; 

    setcookie($string, $string, time() + 120, $this->path, $this->domain); 

    if (isset($_COOKIE[ $string ])) return true; 
    else return false; 
} 

Проблема заключается в том, что она работает только тогда, когда я открываю страницу в два раза, потому что он получает предварительно установленное печенье.

Видимо, все предлагают использовать эту практику, но ее не работают для меня.

Я что-то упустил?

+2

Если у вас нет особых причин для использования 'setcookie', вы должны использовать' $ _SESSION' вместо этого и позволить PHP жонглировать файлами cookie для вас. – meagar

+0

@meagar Должен ли я сделать сеанс только для проверки файлов cookie? – eij

+0

Нет, вы, вероятно, вообще не должны делать проверку файлов cookie. Просто используйте '$ _SESSION' и сделайте с ним. Можно с уверенностью предположить, что у ваших пользователей есть файлы cookie. – meagar

ответ

2

Cookies не работают таким образом. Когда cookie установлен, он недоступен (т. Е. Существует соответствующий ключ $_COOKIE) до следующего запроса.

Что происходит на самом деле:

  • клиент посылает запросы
  • сервер отправляет ответ, содержащий Set-Cookie ответа поле

заголовка После этого клиент отправляет куки вместе с любым последующим запросом:

  • клиента посылает запрос, содержащий соответствующий Cookie поле заголовка запроса
  • сервер регистрирует $_COOKIE ключа
1

Per the docs:

Cookies не будет виден до следующей загрузки страницы, что куки должны быть открыты для просмотра. Чтобы проверить, был ли файл cookie успешно установлен, проверьте, будет ли файл cookie на следующей странице загрузки до истечения срока действия файла cookie. Время истечения устанавливается через параметр expire. Хорошим способом отладки существования файлов cookie является просто вызов print_r ($ _ COOKIE) ;.

Если вам это необходимо на той же странице, используйте сеансы вместо этого или выполните перенаправление на тот же URL-адрес после вызова setcookie.

+0

Черт побери, я полностью пропустил эту часть! Как я могу проверить, включены ли файлы cookie? – eij

0

Печенья устанавливается /, полученные в качестве части обмена HTTP-заголовков, так что, при обычных условиях являются одним из первых, что клиент (браузер) отправляет/принимает. Для вашей проблемы клиент только знает, что у него есть куки-файл для отправки по второму запросу.

Использование хорошего расширения Firefox, такого как Live HTTP Headers, поможет вам узнать, какие сообщения отправлены, когда.

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