Что такое куки (cookie) и как с ними работать?

Я так полагаю, для многих эта тема является темным лесом, хотя по факту ничего сложного тут нет)) Сейчас я постараюсь немного приоткрыть завесу и сделать так, чтобы вы могли использовать эти столько полезные возможности.

Начнем с части теоретической. Итак, что же такое куки, или как их название звучит на оригинале cookie?

Особо углубляться в подробности я не буду, ведь для этого есть Википедия, однако напишу следующее: Куки — это некоторые текстовые данные, что сайт может хранить на компьютере пользователя с целью:

  • сохранения сессии (думаю, вы видели часто галочку в формах авторизации на сайтах по типу «Запомнить меня». Так вот, при установке такой галочки сайт сажает куки на ваш компьютер, чтобы запомнить вас и сохранить текущий сеанс);
  • сохранение настроек сайта (к примеру, на сайте есть возможность выбора его оформления или оформления некоторых его элементов, и изменив однажды их и получив куки на свое устройство с которого зашли на сайт — вы будете видеть такие настройки до тех пор, пока не удалите куки или не пройдет время их действия);
  • ведение статистики по пользователям, а также для некоторых других нужд.

Следует понимать, что само хранение куки на устройстве (будь то ПК, ноутбук, планшет или телефон) не опасно, т.к. куки сами по себе — это простой текстовый файл. Однако, стоит опасаться такой уязвимости, как подмена куки, к примеру, для авторизации на сайте другим пользователем, злоумышленником, что украл куки у жертвы и принимать соответствующие меры против этого (об этом расскажу в следующих статьях на тему куки).

Теперь переходим к практике.

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

Для того, чтобы создать куки используется функция setcookie(), описание ее привожу ниже:

setcookie (string name [, string value [, int expire [, string path [, string domain [, int secure]]]]])

  1. name — единственный параметр среди прочих, что следует обязательно указывать (например: «user», «theme» и т.п.);
  2. expire — дата (Unix time integer, получаемое  с помощью time()  и mktime() функций) , когда срок действия куки подойдет к концу (например: time()+3600 следует указать, чтобы срок действия куки закончился через час);
  3. domain — строковая переменная с именем домена (например: «v1rr.us»);
  4. secure — целое число (0 или 1), в случае выбора 1 — это значит, что кука должна передаваться только по https (защищенное соединение).

Пример создания куки:

PHP

// Создать куки с параметром "user_id" и его значением 
// "321" на 1 час для домена alexdev.ru

setcookie("user_id","321",time()+3600,"alexdev.ru");

Важно отметить, что куки должны быть отправлены до вывода header информации на странице (т.е. вызов функций работы с куки должен быть размещен до вывода <html> и <head>).

Обращение к куки

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

Чтобы обратиться к нашей созданной куки и получить данные из нее, воспользуется глобальным массивом $_COOKIE:

PHP

// Выведет на экран значение куки, в нашем случае это "321"
echo $_COOKIE["user_id"];

Также следует знать, что при получении куки скриптом, она автоматически декодируется и после этого создается переменная с именем куки, т.е. в нашем случае мы еще сможем получить данные из куки обратившись к ней следующим образом:

PHP

// Также будет выведено "321"
echo $user_id;

Удаление куки

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

PHP

// Задаем те же параметры, но с отрицательным временем time()-3600
setcookie("user_id","321",time()-3600,"alexdev.ru");

В дальнейшем, возможно, продолжу расписывать тему куки, но это уже совсем другая история 🙂

Спасибо за внимание.

Автор статьи: V1RR. Категория: PHP
Дата публикации: 14.08.2015