Проверьте, существует ли файл 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 при первом посещении / загрузке страницы пользователя? Должно быть без необходимости обновлять страницу или создавать перенаправление.


person Teodor    schedule 24.05.2012    source источник


Ответы (2)


Отвечать

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

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

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

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

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

if(!isset($_COOKIE['lg'])) {
    setcookie('lg', 'ro');
    $_COOKIE['lg'] = 'ro';
}
echo $_COOKIE['lg'];
person Treffynnon    schedule 24.05.2012
comment
Я лично не рекомендую устанавливать значение $_COOKIE[]. Это может обмануть какой-то другой фрагмент кода позже, когда у пользователя был этот файл cookie. Альтернативой будет $lg = (isset($_COOKIE['lg']) ? $_COOKIE['lg'] : 'ro'; echo $lg; - person Ramy Nasr; 24.10.2017

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

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

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

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

Источник

person 0b10011    schedule 24.05.2012