Вот простая функция, которую я использую:
public function control() { $string = 'lolcheck'; setcookie($string, $string, time() + 120, $this->path, $this->domain); if (isset($_COOKIE[ $string ])) return true; else return false; }
Проблема в том, что он работает только при открытии страницы дважды, потому что он получает ранее установленный файл cookie.
По-видимому, все предлагают использовать эту практику, но она не работает для меня.
Я что-то упускаю?
Файлы cookie не работают. Когда cookie установлен, он недоступен (т. $_COOKIE
ключ $_COOKIE
существует) до следующего запроса.
Что на самом деле происходит:
После этого клиент отправляет файл cookie вместе с любым следующим запросом:
$_COOKIE
В документах :
Куки-файлы не станут видимыми до следующей загрузки страницы, на которой должен отображаться файл cookie. Чтобы проверить, был ли файл cookie успешно установлен, проверьте, будет ли файл cookie на следующей странице загрузки до истечения срока действия файла cookie. Время истечения устанавливается через параметр expire. Хорошим способом отладки существования файлов cookie является просто вызов print_r ($ _ COOKIE) ;.
Если вам нужно, чтобы он был доступен на той же странице, используйте сеансы вместо этого или перенаправляйте на тот же URL-адрес после вызова setcookie
.
Файлы cookie устанавливаются / принимаются как часть обмена заголовками http, поэтому при обычных обстоятельствах это одно из первых, что клиент / браузер отправляет / получает. Для вашей проблемы клиент только знает, что у него есть куки-файл для отправки по второму запросу.
Использование хорошего расширения Firefox, такого как Live HTTP Headers, может помочь вам узнать, какие сообщения отправлены, когда.