Работа с cookie в PHP

Cookie (куки) это небольшие наборы данных (не более 4 кБайт), с помощью которых веб-сайт может хранить на компьютере пользователя необходимую для своей работы информацию, например, для отслеживания активности пользователя или проверки авторизации.

Информация о том, что необходимо произвести какое-либо действие с Coookie отправляется вместе с http заголовками, поэтому, обработка cookies должна происходить до вывода какой-либо другой информации на странице.

Создание куки

Для создания куки используется функция setcookie():

bool setcookie(string $name, string $value, int $expire, string $path, string $domain, bool $secure, bool $httponly);
  • name: имя cookie, которое будет использоваться для доступа к его значению
  • value: значение или содержимое cookie — любой алфавитно-цифровой текст не более 4 кБайт
  • expire (необязательный параметр): срок действия, после которого cookie уничтожаются. Если данный параметр не установлен или равен 0, то уничтожение cookie происходит после закрытия браузера.
  • path (необязательный параметр): путь к каталогу на сервере, для которого будут доступны cookie. Если задать '/', cookie будут доступны для всего сайта. Если задать, например, '/mydir/', cookie будут доступны только из каталога /mydir/' и всех его подкаталогов. По умолчанию значением является текущий каталог, в котором устанавливаются cookie.
  • domain (необязательный параметр): задает домен, для которого будут доступны cookie. Если это домен второго уровня, например, localhost.com, то cookie доступны для всего сайта localhost.com, в том числе и для его поддоменов типа blog.localhost.com. Если задан поддомен blog.localhost.com, то cookie доступны только внутри этого поддомена.
  • secure (необязательный параметр): указывает на то, что значение cookie должно передаваться по протоколу HTTPS. Если задано true, cookie от клиента будет передано на сервер, только если установлено защищенное соединение. По умолчанию равно false.
  • httponly (необязательный параметр): если равно true, cookie будут доступны только через http протокол. То есть cookie в этом случае не будут доступны скриптовым языкам, например, JavaScript. По умолчанию параметр равен false.

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

// Сохранение переменной с установкой времени жизни
setcookie("value", "Значение переменной", time()+3600);

// Сохранение массива
setcookie("key[1]", "Uno");
setcookie("key[2]", "Dos");
setcookie("key[3]", "Tres");
setcookie("key[4]", "Cuatro");

Получение cookie

Данные о cookie, хранятся в глобальном ассоциативном массиве $_COOKIE. 

// Вывод переменной
if (isset($_COOKIE['autorize'])) ? echo "Hello world!" : echo "Вам необходимо авторизоваться";

// Вывод массива 
if (isset($_COOKIE['counting'])) {
    foreach ($_COOKIE['counting'] as $key => $value) {
        $name = htmlspecialchars($key);
        $value = htmlspecialchars($value);
        echo "$key. $value <br />";
    }
}

Удаление cookie

Для удаления cookie можно установить пустое значение для переменной, либо в качестве срока действия указать какое-либо время в прошлом:

if (isset($_COOKIE['variable'])) {
    unset($_COOKIE['variable']); // чистим массив

    // указываем прошедший временной период
    setcookie ("variable", "", time() - 3600);

    // или устанавливаем пустое значение
    // setcookie("variable","");
}

Просмотр информации о cookie в браузере

Посмотреть какие куки использует та или иная страница можно в консоли разработчика (клавиша F12), на вкладке Network. Нажав на строку с адресом страницы можно увидеть все передаваемые заголовки, среди которых можно встретить и Cookie.

Узнать передает ли какое-либо действие информацию в куки, можно в том же месте, попробовав найти запись созданную действием, и посмотрев, есть ли там заголовок set-cookie.

В той же консоли разработчика можно посмотреть все файлы куки, которые созданы браузером для данного сайта. Эта информация содержится на вкладке Application, в подменю Cookies.

Также информацию о хранящихся cookie файлах можно найти в настройках браузера:

  • Chrome: настройки → дополнительные → настройка контента → файлы cookie → файлы cookie и данные сайта
  • FierFox: настройки → конфиденциальность и безопасность → cookies и информация сайта