Вопрос по php – Проверьте, существует ли PHP-cookie и, если нет, установите его значение.

28

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

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

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

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

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

Ваш Ответ

2   ответа
75
Отве

PHP инструкция:

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

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

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

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

if(!isset($_COOKIE['lg'])) {
    setcookie('lg', 'ro');
    $_COOKIE['lg'] = 'ro';
}
echo $_COOKIE['lg'];
Я бы лично рекомендовал не устанавливать$_COOKIE[] ценность. Это может обмануть другой фрагмент кода позже, чтобы у пользователя был этот cookie. Альтернативой будет$lg = (isset($_COOKIE['lg']) ? $_COOKIE['lg'] : 'ro'; echo $lg; Ramy Nasr
Отличный обходной путь! Bas van Dijk
спасибо за обходной путь .. отлично работает Teodor
10

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

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

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

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

Источни

Похожие вопросы