Когда я сначала создаю файл cookie, я, похоже, не могу захватить тот же файл cookie, пока не будет загружена следующая страница. Это похоже на то, что файл cookie не существует в браузере, пока страница не будет запрошена во второй раз.
Я использую фреймворк Kohana PHP:
Cookie::set('new_cookie', 'I am a cookie'); $cookie = Cookie::get('new_cookie'); //$cookie is NULL the first time this code is run. If I hit the page again and then call Cookie:get('new_cookie'), the cookie's value is read just fine.
Итак, я убежден, что это нормальное поведение и что я, вероятно, не понимаю, как работают cookie. Может ли кто-нибудь прояснить это для меня?
Файлы cookie устанавливаются в заголовках HTTP, поэтому, когда сервер возвращает страницу. Когда вы перезагружаете страницу, ваш браузер отправит их обратно на сервер.
Таким образом, совершенно нормально, что они «видны» сразу после нового запроса.
Вот пример ответа с сервера:
HTTP/1.1 200 OK Content-type: text/html Set-Cookie: name=value Set-Cookie: name2=value2; Expires=Wed, 09-Jun-2021 10:18:14 GMT (content of page)
Когда вы перезагружаете страницу, ваш браузер отправляет это сообщение:
GET / HTTP/1.1 Host: www.example.org Cookie: name=value; name2=value2 Accept: */*
Вот почему сервер может видеть их только после нового запроса браузером.
Вы считаете, что файлы cookie недоступны до загрузки следующей страницы. Файлы cookie хранятся в браузере и создаются после отправки документа клиенту. Когда клиент снова загружает (или перезагружает) любую из ваших страниц, любые существующие куки будут отправляться на сервер вместе с запросом страницы.
Да, файлы cookie могут быть доступны только при последующих загрузках страниц, потому что глобальное значение $ _COOKIE заполняется до того, как вы установите cookie.
Клиент (браузер) видит новый файл cookie в ответе на какой-либо запрос. Затем он отправляет его во все последующие запросы на сервер. Так что да, это нормальное поведение.