Когда следующий код запускается в первый раз, он не выводит значение «var1», но он выполняет обновление браузера (f5), почему? Поскольку я понимаю, когда браузер отправляет код на сервер, setcookie () сохраняет переменную cookie («var1») клиенту (браузеру) в локальном файле и помещает значение «var1» в глобальный домен через $ _COOKIE superglobal ,
Поскольку значение «var1» доступно сразу в $ _COOKIE после того, как первый сервер отвечает на первоначальный запрос браузера, тогда почему «var1» не отображается. Является ли это, что setcookie () хранит значение «var1» в браузере клиента по первому запросу и только после обновления страницы (второй запрос) браузер отправляет серверу значение «var1», а затем сервер делает его доступным в глобальном домене через функцию $ _COOKIE.
<?php setcookie("var1","5"); echo $_COOKIE['var1']; ?>
Простите это для меня.
Благодарю djain.
Все объяснено в руководстве. setcookie()
вызывает заголовок Set-Cookie:
response, который будет возвращен браузеру. Массив $_COOKIE
может быть заполнен только следующим HTTP-обновлением, когда браузер имел возможность ответить назад заголовком $_COOKIE
Когда следующий код запускается в первый раз, он не выводит значение «var1», но он выполняет обновление браузера (f5), почему?
Браузеру необходимо отправить cookie обратно. По первому запросу он еще не знает об этом cookie. После обновления он делает. Только тогда он может отправить его.
Поскольку я понимаю, когда браузер отправляет код на сервер,
По второму запросу.
setcookie () хранит переменную cookie ("var1") клиенту (браузеру) в локальном файле
Браузер сохраняет его.
и ставит значение «var1» в глобальном домене через суперкоммулятивный файл $ _COOKIE.
Не сразу.
Поскольку значение «var1» доступно сразу в $ _COOKIE после того, как первый сервер отвечает на первоначальный запрос браузера, тогда почему «var1» не отображается.
Это не сразу в $ _COOKIE. Этого не может быть. Этот массив заполняется только один раз, когда начинается PHP.
Является ли это, что setcookie () хранит значение «var1» в браузере клиента по первому запросу и только после обновления страницы (второй запрос) браузер отправляет серверу значение «var1», а затем сервер делает его доступным в глобальном домене через функцию $ _COOKIE.
Да. Вот как это работает.
При вызове setcookie
PHP устанавливает заголовок HTTP Cookie
который доставляется клиенту вместе с остальной частью вывода скрипта. Затем клиент (браузер) сохранит этот файл cookie в своем хранилище файлов cookie и отправит его обратно на сервер при последующих запросах.
$_COOKIE
содержит все файлы cookie, полученные в текущем запросе от клиента. В первый раз это ничего , поскольку клиент еще не получил заголовок Cookie
. Только при последующих запросах клиент отправляет cookie, который хранится в $_COOKIE
. setcookie()
не заполняет переменную $_COOKIE
.
Client Server 1. --> $_COOKIE is empty 2. Cookie store <-- setcookie() 3. Cookie send --> $_COOKIE is set
Я считаю, что это связано с тем, как заполняется $ _COOKIE. Согласно эталонному материалу, он поступает из любых файлов cookie, отправленных клиентом. Куки отправляются в HTTP-заголовке, когда вы делаете запрос на страницу, поэтому имеет смысл, что он работает только во второй раз. В первый раз вы настраиваете cookie (клиент еще не знает об этом, чтобы отправить его вместе с первым запросом). Когда вы обновляете, cookie устанавливается с помощью загрузки первой страницы, и клиент отправляет cookie с запросом, который PHP видит и заполняет в переменную $ _COOKIE.
Куки-файлы хранятся в ответе и загружаются от пользователя по запросу, например, заголовок заголовка или заголовок сообщения.
Ваш ответ HTTP не вызывает HTTP-запрос (что совершенно нормально)
setcookie()
Устанавливает cookie на клиенте, отправляя заголовок cookie, а не на сервер. $ _COOKIE задается заголовком cookie, исходящим из HTTP-запроса.