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

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

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

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

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

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

Ответ

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

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

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

Работать вокруг

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

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

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

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

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

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

Источник