Cookies

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

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

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

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

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

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

Пример

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

Request 1 GET /homepage.php HTTP/1.1 Host: eth1.ru 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: eth1.ru 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: путь до сервера или путь в домене на который отпраляется куки



Пример:

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

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

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

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

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

eth1.ru/*

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



Пример:

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

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

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

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

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


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

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

$options = array ( 'expires' => time() + 60*60*24, 'path' => ' /' , 'domain' => '.eth1.ru' , '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

Похожие статьи
Программирование на PHP
Массивы в PHP
Циклы в PHP
Дата и время в PHP - основы
Как отобразить время различных часовых поясов PHP
Как вставить переменную в ссылку PHP
gettype(): определить тип переменной PHP
json_decode
Как получить ширину экрана с помощью PHP
Вызов функции из другого файла
Premature end of chunk coded message body: closing chunk expected
Сгенерировать неповторяющиеся случайные числа PHP
Узнать свой HTTP_USER_AGENT
Сравнить две даты
Классы в PHP 8
Комментарии в PHP
substr: обрезать строку
Запросы к REST API на PHP
$_SERVER['REQUEST_URI']: текущая url
Работа с базами данных
Работа с cookies
PHP sessions
Аутентификация и авторизация в PHP 8
switch, тернарный
try catch
Мои скрипты
PHP_errors.log Beget
Разбор ошибок

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: