Подтвердить что ты не робот

Проверьте, существует ли файл cookie PHP и не задан ли его значение

Я работаю над многоязычным сайтом, поэтому я пробовал этот подход:

echo $_COOKIE["lg"];
if (!isset($_COOKIE["lg"]))
    setcookie("lg", "ro");
echo $_COOKIE["lg"];

Идея заключается в том, что если у клиента нет cookie lg (поэтому он впервые посетил этот сайт), тогда установите для этого пользователя cookie lg = ro.

Все работает отлично, за исключением того, что если я впервые введу эту страницу, первый и второй echo ничего не вернут. Только если я обновляю страницу, это набор файлов cookie, а затем echo печатать строку "ro", которую я ожидаю.

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

4b9b3361

Ответ 1

Ответ

Вы не можете в соответствии с инструкцией PHP:

После того, как файлы cookie установлены, к ним можно получить доступ на следующей странице загрузите массивы $_COOKIE или $HTTP_COOKIE_VARS.

Это связано с тем, что файлы cookie отправляются в заголовки ответов в браузер, и браузер должен отправить их обратно со следующим запросом. Вот почему они доступны только при загрузке второй страницы.

Работайте

Но вы можете обойти его, установив $_COOKIE, когда вы вызываете setcookie():

if(!isset($_COOKIE['lg'])) {
    setcookie('lg', 'ro');
    $_COOKIE['lg'] = 'ro';
}
echo $_COOKIE['lg'];

Ответ 2

Куки файлы отправляются только во время запроса и поэтому не могут быть получены сразу после его назначения (доступны только после перезагрузки).

После того, как файлы cookie установлены, к ним можно получить доступ к загрузке следующей страницы с помощью массивов $_COOKIE или $HTTP_COOKIE_VARS.

Если выход существует до вызова этой функции, setcookie() завершит сбой и вернет FALSE. Если setcookie() успешно запущен, он вернет TRUE. Это означает, что не указывает, принял ли пользователь cookie.

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

Источник