Cookie управляются через свойство document.cookie. Установка cookie выполняется присваиванием строки с параметрами, а чтение возвращает все cookie в виде одной строки, которую нужно парсить.
Ключевые аспекты
Установка — document.cookie = "name=value; expires=...; path=/"
Чтение — document.cookie возвращает все cookie как строку "name1=value1; name2=value2"
Удаление — установка cookie с прошедшей датой expires
Кодирование — значения нужно кодировать через encodeURIComponent()
Плюсы
Нативная поддержка браузерами
Автоматическая отправка на сервер с каждым запросом
Гибкие настройки срока жизни и области видимости
Минусы
Неудобный API для работы (строковый формат)
Ограничение размера (4 КБ на cookie)
Необходимость ручного парсинга при чтении
Нет встроенных методов для удаления
Частые ошибки на собеседованиях
Забывают кодировать специальные символы через encodeURIComponent()
Не указывают path=/ — cookie видна только для текущего пути
Путают expires (дата) и max-age (секунды)
Пытаются прочитать httpOnly cookie через JavaScript (невозможно)
Введение и проблематика
Cookie — один из старейших механизмов хранения данных в браузере. В отличие от localStorage/sessionStorage, cookie автоматически отправляются на сервер с каждым HTTP-запросом. Однако API для работы с cookie в JavaScript неудобен — это простое строковое свойство без методов.
Свойство document.cookie работает не как обычное свойство объекта. При записи оно добавляет/обновляет cookie, а при чтении возвращает все cookie сразу.
Особенности document.cookie
js
// Запись НЕ перезаписывает все cookie, а добавляет/обновляет однуdocument.cookie ="user=John";document.cookie ="theme=dark";// Чтение возвращает ВСЕ cookie одной строкойconsole.log(document.cookie); // "user=John; theme=dark"
Базовая теория
Формат cookie
Cookie представляет собой строку вида name=value с опциональными параметрами:
Если не указать path, cookie будет видна только для текущего пути и его подпутей. Обычно используют path=/ для доступа со всех страниц сайта.
Практические примеры
Установка cookie
Простая cookie
js
// Cookie без параметров — удалится при закрытии браузераdocument.cookie ="username=Иван";
Cookie с кодированием
js
// Спецсимволы нужно кодироватьconstvalue="Иван Петров; email@test.com";document.cookie =`user=${encodeURIComponent(value)}`;
Cookie с параметрами
js
// Cookie на 7 дней, доступная для всего сайтаconstexpires=newDate();expires.setDate(expires.getDate() +7);document.cookie =`theme=dark; expires=${expires.toUTCString()}; path=/`;
Чтение cookie
js
// document.cookie возвращает строку всех cookieconsole.log(document.cookie);// "username=%D0%98%D0%B2%D0%B0%D0%BD; theme=dark; session=abc123"// Функция для получения значения конкретной cookiefunctiongetCookie(name) {constcookies=document.cookie.split('; ');for (constcookieof cookies) {const [cookieName,cookieValue] =cookie.split('=');if (cookieName === name) {returndecodeURIComponent(cookieValue); } }returnnull;}// Использованиеconsttheme=getCookie('theme'); // 'dark'constuser=getCookie('username'); // 'Иван'
Удаление cookie
js
// Для удаления устанавливаем прошедшую дату expiresfunctiondeleteCookie(name) {document.cookie =`${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/`;}// Или используем max-age=0functiondeleteCookieAlt(name) {document.cookie =`${name}=; max-age=0; path=/`;}deleteCookie('theme');
Пограничные кейсы
⚠️
Важно: При удалении cookie нужно указать тот же path и domain, что и при установке. Иначе cookie не удалится.
js
// Cookie установлена с path=/admindocument.cookie ="token=abc; path=/admin";// Это НЕ удалит cookie (другой path)document.cookie ="token=; max-age=0; path=/";// Это удалит cookie (тот же path)document.cookie ="token=; max-age=0; path=/admin";
🚫
httpOnly cookie: Cookie с флагом httpOnly недоступны через JavaScript. Они устанавливаются только сервером и защищают от XSS-атак.
js
// Сервер установил: Set-Cookie: session=xyz; httpOnlydocument.cookie; // session НЕ будет в этой строке