Cookies

Содержание
Что такое куки
Пример
Создать cookies
Cookie options
Пример задания options
Демонстрация в вашем браузере
Удалить куки
Недостатки

Что такое куки

Куки - это файлы размером до 4KB, которыми по протоколу HTTP или HTTPS обмениваются HTTP клиент (браузер) и HTTP сервер.

Пользователь заходит на сайт через браузер. Браузер делает GET запрос. Сервер возвращает ответ в котором содержатся данные куки.

Браузер создает куки файл с этими данными. Затем пользователь может перейти на другую страницу сайта, это новый GET запрос, но в нём уже будет содержимое куки.

Сервер допишет что-то ещё и так они и будут пересылать куки друг другу.

Пример

Пример запроса от клиента

Request 1 GET /homepage.php HTTP/1.1 Host: urn.su Accept: */*

Ответ сервера

Response 1 HTTP/1.1 200 OK Content-type: text/html Set-Cookie: lang=rus

Запрос к другой странице будет уже с куки

Request 2 GET /aboutus.php HTTP/1.1 Host: urn.su Cookie: lang=rus Accept: */*

Примерно таким образом куки позволяют запоминать пользовательские настройки

Создать куки с помощью PHP

<?php setcookie(string $name, string $value="", array $options=[]) : bool

Разберемся с параметрами

name

Имя cookie - помогается извлекать значения из superglobal переменной $_COOKIE

value

Данные, которые записаны в куки

options

Это ассоциативный массив (можно названть словарём для краткости) с набором ключей:

Попытка использовать другой ключ приведёт к E_WARNING

Разберём эти шесть опций подробнее

Cookie options

expires: указывает когда куки просрочатся.

Используется вместе с функцией time(), которая задаёт начальный момент.



Пример:

Если не задавать expires, куки будут удаляться при каждом переоткрытии страницы.

path: путь до сервера или путь в домене на который отпраляется куки



Пример:

Допустим, что домен это urn.su. Если задать путь как '/php/'

setcookie(name, value, time()+3600, '/php/');

То куки будут отправлены только при запросах к urn.su/php и поддиректориям

Если задать path с помощью / то куки будут отправлять вне зависимости от того к какому файлу сделан запрос.

setcookie(name, value, time()+3600, '/');

urn.su/*

domain: Задаёт домен на который будут отправляться куки.



Пример:

Если задать как www.urn.su то будет работать только c www.urn.su

Если задать как urn.su то будет работать также со всеми поддоменами

secure: если поставить в TRUE то куки будут отправляться только по HTTPS. По умолчанию стоит FALSE

httponly: куки будет доступна только по HTTP (и HTTPS). То есть JavaScript или bbscript не смогут получить к куки доступ

samesite: устанавливает правила отправки куки для межсайтовых запросов.


Возможны три варианта:

Пример использования $options

$options = array ( 'expires' => time() + 60*60*24, 'path' => ' /' , 'domain' => '.urn.su' , 'secure' => true, // or false 'httponly' => true, // or false 'samesite' => 'None' // or Lax or Strict ); setcookie('lang', 'rus', $options);

Применение куки

Если вы хотите увидеть как работают куки прямо в вашем браузере - переходите к следующей статье:

«Демонстрация работы с куки»

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

На странице 1_form.php вы можете ввести в форму произвольное число. Оно будет записано в куки your_number

На странице 1_result.php можно увидеть что куки your_number действительно создано

На странице 2_form.php произойдёт проверка наличия куки name .

Если куки name уже был установлен, вы увидите персонифицированное приветствие.

Если не установлен, то вам будет предложено снова заполнить форму.

И тогда на странице 2_result.php вы увидите персонифицированное сообщение

Удалить куки

Удалить куки функцией unset() не получится потому что они останутся на строне клиента. Браузер просто пришлёт их как ни в чём ни бывало.

Чтобы удалить куки нужно сделать это на сервере + отправить команду на удаление браузеру.

Эта команда заключается в установке нулевого или отрицательного времени в expires

options['expires'] = time() - x setcookie(name, value, options);

Пример

$options['expires'] = time() - 3600; setcookie(name, $_COOKIE['name'], $options); unset($_COOKIE['name']);

Ограничения

Чтобы обойти эти ограничения нужно использовать sessions