Управление cookie в браузере: возможности и границы

Есть ли возможность с клиента (с браузера) управлять cookie?

Теория: что значит «управлять cookie»

Cookie — это механизм HTTP-состояния: сервер задаёт значения, браузер хранит их и автоматически прикрепляет к запросам в заголовке Cookie при соблюдении правил области видимости.
Под «управлением cookie» обычно понимаются операции чтения, записи/обновления и удаления, которые могут выполняться сервером через Set-Cookie и частично — клиентом через Web API.
Даже при записи с клиента окончательное поведение (хранение и отправка) контролируется браузером, а не JavaScript-кодом.

Cookie — не «переменная JavaScript», а часть HTTP-механизма, поэтому контроль всегда ограничен политиками браузера и атрибутами cookie.

С клиента доступны чтение и запись cookie, привязанных к текущему документу, через document.cookie (строковый интерфейс: чтение возвращает строку, запись устанавливает одну cookie за операцию).
В поддерживаемых браузерах возможен Cookie Store API — асинхронный интерфейс cookieStore.*, полезный в окружениях без document (например, в service worker).
Доступна только работа с «скриптовыми» cookie: те, которые не помечены HttpOnly, и которые попадают в допустимую область домена/пути текущей страницы.

Примеры (как обычный текст, без выделения блоков):

Чтение всех доступных cookie текущего документа: const all = document.cookie;

Установка cookie (на год, для всего сайта): document.cookie = "theme=dark; Path=/; Max-Age=31536000";

Обновление cookie (по сути — повторная установка с тем же именем): document.cookie = "theme=light; Path=/; Max-Age=31536000";

Удаление cookie (истечение срока; важны совпадения Path и при наличии — Domain): document.cookie = "theme=; Path=/; Max-Age=0";

Пример Cookie Store API (установка и чтение):

async function demo() {
  await cookieStore.set("cookie1", "value1");
  const c = await cookieStore.get("cookie1");
  console.log(c);
}
Ситуация «cookie видна в DevTools, но не читается через document.cookie» чаще всего объясняется атрибутом HttpOnly и является ожидаемым поведением.

Ограничения: что клиент сделать не может

Cookie с атрибутом HttpOnly принципиально недоступны JavaScript: они предназначены для передачи только через HTTP и скрываются от скриптовых API.
Нельзя корректно «заставить» браузер принять cookie для произвольного чужого домена из кода страницы: область cookie связана с доменными правилами и origin-ограничениями.
Нельзя считать надёжным «управлением cookie» попытку вручную подставлять заголовок Cookie в запросах: браузер формирует отправку cookie сам, по cookie-движку и политикам безопасности.

Таблица возможностей:

ДействиеВозможно с клиентаКомментарий
Прочитать обычные cookie текущего документаДаЧерез document.cookie или cookieStore.get*() (если доступно).
Записать/обновить cookie текущего контекстаДаЧерез document.cookie или cookieStore.set(), но с ограничениями атрибутов и области.
Удалить cookieДаЧерез Max-Age=0/прошлый Expires, при совпадении Path/Domain.
Прочитать/изменить HttpOnlyНетФлаг создан для защиты от чтения из JS (снижение риска кражи при XSS).
Установить cookie «на чужой домен»НетБраузер применяет доменные правила и не даёт произвольно расширять область.
Гарантировать отправку в third-party контекстахНетОтправка зависит от SameSite, Secure и политик браузера (third-party блокировки).

SameSite, third-party и современные изменения

Атрибут SameSite управляет тем, будет ли cookie отправляться в кросс-сайтовых контекстах (Strict, Lax, None), при этом для SameSite=None обычно требуется Secure.
Из‑за ужесточения политики third-party cookie в браузерах поведение embedded-сценариев (iframe, виджеты, сторонняя авторизация) всё чаще определяется настройками приватности и механизмами анти-трекинга, а не только кодом.
Для совместимости развиваются подходы вроде партиционирования cookie (CHIPS/Partitioned) и Storage Access API, но они не дают «полного контроля», а задают регламентированный путь к ограниченному доступу.

При проектировании авторизации и встраиваний следует исходить из того, что third-party cookie могут быть недоступны по умолчанию в части браузеров и режимов.

Кратко: С клиента управлять cookie можно, но не полностью: разрешены чтение/запись и удаление обычных cookie в рамках текущего сайта через document.cookie (и иногда cookieStore), однако HttpOnly скрывает cookie от JavaScript, а Secure/SameSite и third-party ограничения браузеров определяют, будут ли cookie работать и отправляться в запросах.