Задумывались ли вы, несмотря на то, что HTTP является протоколом без сохранения состояния, когда вы заходите на веб-сайт, покупаете вещи и проверяете, как сервер может идентифицировать вас уникальным образом? Вы можете задаться вопросом, если HTTP не имеет состояния, но ваше состояние поддерживается посредством ваших взаимодействий, разве это не противоречие? Добро пожаловать в мир файлов cookie (а не тех, которые мы можем есть, кстати :)), один из основных способов поддержания состояния пользователя и взаимодействия между веб-браузером и веб-сервером.
Куки-файлы — это небольшие фрагменты информации, хранящейся в браузере на компьютере пользователя. Информация, хранящаяся в cookie, используется для уникальной идентификации пользователя, и эта информация отправляется на сервер с каждым запросом, чтобы сервер мог использовать его. В файлах cookie могут храниться различные данные, такие как ваше имя, дата вашего последнего посещения, содержимое корзины покупок и т. Д. Файлы cookie, сохраненные на одном веб-сайте, не могут быть доступны для других веб-сайтов, что делает файлы cookie относительно безопасными для хранения личной информации. Тем не менее, не стоит хранить в них конфиденциальную информацию, такую как пароли и данные кредитных карт.
Жизненный цикл печенья
Вот как выглядит жизненный цикл файла cookie PHP, от выпечки до еды:
При первом подключении браузера к определенному серверу файлы cookie отсутствуют. Когда выполняется запрос к сценарию PHP, сценарий вызывает функцию setcookie()
. Это приводит к отправке HTTP-заголовка Set-Cookie
в ответе, который содержит имя и значение файла cookie, который нужно установить.
Когда браузер получает ответ, он локально сохраняет значение заголовка Set-Cookie
как cookie. Когда впоследствии к серверу поступает несколько запросов, браузер включает заголовок Cookie
содержащий имя и значение cookie. PHP перехватывает его и создает запись в массиве $_COOKIE
с именем и значением куки.
Выпечка PHP Cookies
PHP предоставляет доступ к файлам cookie через функцию setcookie()
и суперглобальный массив $_COOKIE
. setcookie()
сохраняет данные в куки, а $_COOKIE
получает значения из куки.
Настройка Cookies
Функция setcookie()
используется для установки значения и необязательной даты истечения срока действия куки. Синтаксис для функции:
setcookie ( имя , значение , срок действия , путь , домен , безопасный )
Значение каждого параметра, а также, является ли он обязательным или необязательным, приведено в следующей таблице, адаптированной из таблицы, представленной в W3Schools:
Давайте рассмотрим пример установки cookie в коде PHP.
<?php $firstcookie = "my first cookie"; $expiry = time() + (60 * 60 * 8); // send a cookie that expires in 8 hours setcookie("FirstCookie", $firstcookie, $expiry);
Код устанавливает значение cookie в переменной $firstcookie
и дату окончания срока действия в переменной $expiry
. Имя cookie устанавливается как «FirstCookie» при вызове функции setcookie()
. Имя файла cookie может быть любым.
Обратите внимание, что срок действия файла cookie истечет через 8 часов (секунды × минуты × часы за пределами текущего времени). Но что, если вы хотите, чтобы ваш файл cookie был удален немедленно или как только его информация была получена браузером? Вы можете установить дату истечения срока в прошлом. Например, вы можете установить $expiry
как time()-3600
.
Файлы cookie по умолчанию устанавливаются только для текущего каталога и его потомков. Четвертый параметр path ограничивает доступ к файлам cookie для указанного пути на вашем сервере. Например, если для файла cookie задан каталог «/ test /», он будет доступен только сценариям в каталоге test
и его подкаталогах. Если вы хотите, чтобы cookie был установлен для корневого каталога, то в качестве параметра пути следует использовать «/», как в этом примере:
<?php setcookie("FirstCookie", $firstcookie, $expiry, "/");
Пятый параметр domain ограничивает доступ к cookie для данного домена. Например, если вы хотите, чтобы доступ к файлам cookie осуществлялся с двух разных веб-серверов, таких как www.trial.com и support.trial.com, установите для параметра домена значение .trial.com. Это сделает куки доступными для обоих серверов.
<?php setcookie("FirstCookie", $firstcookie, $expiry, "/", ".trial.com");
Файлы cookie отправляются в браузер с использованием полей заголовка в протоколе HTTP. Из-за этого необходимо установить куки перед отправкой пользователю одной строки HTML или любого другого вывода. Файлы cookie не будут установлены, если будет отправлен какой-либо вывод. В этом случае setcookie()
вернет false, а PHP выдаст сообщение об ошибке.
Получение и обновление файлов cookie
Получение куки довольно просто в PHP. Глобальный массив $_COOKIE
используется для получения значения cookie для последующих запросов страницы. Например, если вы хотите отобразить количество посещений пользователя, то следующий код должен помочь:
<?php $visits = 1; if (isset($_COOKIE["visits"])) { $visits = (int)$_COOKIE["visits"]; } setcookie("visits", $visits + 1, time() + (60 * 60 * 24 * 30)); echo "You have visited this page $visits time(s).";
Файл cookie автоматически удаляется веб-браузером по истечении срока годности. Таким образом, установка параметра setcookie()
функции setcookie()
на произвольное время в прошлом удаляет cookie. setcookie()
использует то же имя домена, имя пути и cookiename, которые были указаны при создании файла cookie; только значение и параметр expire должны быть изменены. Здесь в этом примере для параметра value установлено значение null, а для параметра expire задано произвольное время в прошлом.
<?php $expiry = time() - 60; setcookie("FirstCookie", $firstcookie, $expiry, "/", ".trial.com");
Финальные крошки
В некоторых случаях пользователь может отключить файлы cookie в браузере по соображениям конфиденциальности. Поэтому перед использованием файлов cookie рекомендуется всегда сначала проверять, включены ли для пользователя файлы cookie в браузере. Вы можете сделать это, установив cookie, затем перенаправив на следующую страницу с флагом в URL и проверив, был ли cookie получен обратно. Если нет, то отобразите сообщение для пользователя, предлагающее включить куки.
Таким образом, отключение файлов cookie на сайте, для которого требуются файлы cookie, отключает функциональность сайта. В этом случае нам нужно найти другие способы поддержания состояния. Одним из альтернативных вариантов является использование PHP-сессий и добавление sessionID к URL-адресу, но помните, что такой подход может привести к социальным атакам.
При использовании файлов cookie следует помнить следующее:
- Сервер может определять несколько файлов cookie с разными именами, но браузеры ограничивают количество файлов cookie на сервер (количество браузеров варьируется, но обычно составляет около 20).
- Максимальный размер любого файла cookie составляет 4 КБ.
- Несмотря на то, что вы установили срок действия куки, пользователь может удалить куки в любое время.
- К файлам cookie могут обращаться только те браузеры, которые их установили (Firefox и IE не делятся ими).
- Пользователь может отключить куки в своем браузере.
- Файлы cookie должны быть установлены до того, как из скрипта PHP будет отправлен любой другой вывод, иначе вы получите сообщение об ошибке.
Это все для печенья. Теперь вы сможете использовать файлы cookie в своих приложениях PHP, так что начните печь и дайте мне знать, каков ваш вкус!
Изображение через Fotolia