Файлы cookie
Позволяет расширениям получать и устанавливать файлы cookie, а также получать уведомления об их изменении.
Разрешения
Для использования этого API дополнение должно указать разрешение на использование API «cookies» API-разрешение в своём файле manifest.json, а также разрешения на доступ к хосту для всех сайтов, к файлам cookie которых оно хочет получить доступ. Дополнение может читать или записывать любые файлы cookie, которые можно прочитать или записать с помощью URL-адреса, соответствующего разрешениям на доступ к хосту. Например:
http://*.example.com/-
Дополнение с этим разрешением на доступ к хосту может:
- Считывать незащищённый файл cookie для
www.example.com, с любым путём. - Записывать защищённый или незащищённый файл cookie для
www.example.com, с любым путём.
Оно не может:
- Считывать защищённый файл cookie для
www.example.com.
- Считывать незащищённый файл cookie для
http://www.example.com/-
Дополнение с этим разрешением на доступ к хосту может:
- Считывать незащищённый файл cookie для
www.example.com, с любым путём. - Считывать незащищённый файл cookie для
.example.com, с любым путём. - Записывать защищённый или незащищённый файл cookie для
www.example.comс любым путём. - Записывать защищённый или незащищённый файл cookie для
.example.comс любым путём.
Оно не может:
- Читать или записывать файл cookie для
foo.example.com. - Читать или записывать файл cookie для
foo.www.example.com.
- Считывать незащищённый файл cookie для
*://*.example.com/-
Дополнение с этим разрешением на доступ к хосту может:
- Читать или записывать защищённый или незащищённый файл cookie для
www.example.comс любым путём.
- Читать или записывать защищённый или незащищённый файл cookie для
Защита от отслеживания
Трекеры используют файлы cookie третьих сторон, то есть файлы cookie, установленные веб-сайтом, отличным от того, на котором вы находитесь, чтобы идентифицировать посещаемые вами веб-сайты. Например:
- Вы посещаете
a-shopping-site.com, который используетad-tracker.comдля доставки своих объявлений в сети.ad-tracker.comустанавливает файл cookie, связанный с доменомad-tracker.com. Пока вы находитесь наa-shopping-site.com,ad-tracker.comполучает информацию о просматриваемых вами товарах. - Теперь вы посещаете
a-news-site.com, который используетad-tracker.comдля доставки объявлений.ad-tracker.comсчитывает свой файл cookie и использует полученную информацию отa-shopping-site.comдля определения того, какие объявления отображать вам.
Firefox включает функции для предотвращения отслеживания. Эти функции разделяют файлы cookie, чтобы трекеры не могли установить связь между посещаемыми сайтами. Таким образом, в приведенном выше примере ad-tracker.com не может увидеть файл cookie, созданный на a-news-site.com при посещении a-shopping-site.com. Первая итерация этой защиты была изоляцией первого уровня, которая теперь заменяется динамическим разделением.
Примечание: Изоляция первого уровня и динамическое разделение не будут активны одновременно. Если пользователь или расширение включит изоляцию первого уровня, она имеет приоритет над динамическим разделением. Однако, когда частный просмотр использует динамическое разделение, обычный просмотр может не разделять файлы cookie. Подробности см. в Статус разделения в Firefox.
Разделение хранилища
При использовании динамического разделения Firefox разделяет хранилище, доступное JavaScript-API, по верхнему уровню сайта, обеспечивая при этом соответствующий доступ к неразделённому хранилищу для обеспечения распространённых вариантов использования. Эта функция вводится постепенно. Подробнее об реализации см. в Статус разделения в Firefox.
Разделы хранилища определяются схемой URL верхнего уровня сайта и, когда динамическое разделение активно, значение ключа доступно через свойство partitionKey.topLevelSite в API файлов cookie, например, partitionKey: {topLevelSite: "http://site"}.
В общем случае верхнеуровневые документы находятся в неразделённом хранилище, а фреймы третьих сторон — в разделённом хранилище. Если ключ раздела определить нельзя, используется значение по умолчанию (неразделённое хранилище). Например, все сайты HTTP(S) могут использоваться в качестве ключа раздела, а URL-адреса moz-extension:- — нет. Поэтому фреймы в документах расширений Firefox не используют разделённое хранилище.
По умолчанию cookies.get(), cookies.getAll(), cookies.set() и cookies.remove() работают с файлами cookie в неразделённом хранилище. Чтобы работать с файлами cookie в разделённом хранилище в этих API, topLevelSite в partitionKey должен быть установлен. Исключение составляет getAll где установка partitionKey без topLevelSite возвращает файлы cookie в разделённом и неразделённом хранилище. cookies.onChanged срабатывает для любого файла cookie, к которому расширение может получить доступ, включая файлы cookie в разделённом хранилище. Чтобы убедиться, что изменяется правильный файл cookie, расширения должны прочитать свойство cookie.partitionKey из события и передать его значение в cookies.set() и cookies.remove().
Изоляция первого уровня
При включённой изоляции первого уровня файлы cookie квалифицируются по домену исходной страницы, которую посетил пользователь (по существу, домен, отображаемый пользователю в строке URL, также известный как «домен первого уровня»).
Изоляцию первого уровня можно включить пользователю путём настройки конфигурации браузера и установить расширениям, используя параметр firstPartyIsolate в privacy API. Обратите внимание, что изоляция первого уровня включена по умолчанию в Tor Browser.
В API cookies домен первого уровня представлен атрибутом firstPartyDomain. Все файлы cookie, установленные при включённой изоляции первого уровня, имеют этот атрибут, установленный на домен исходной страницы. В приведенном выше примере это a-shopping-site.com для одного файла cookie и a-news-site.com для другого. При выключенной изоляции первого уровня все файлы cookie, установленные веб-сайтами, имеют это свойство, установленное на пустую строку.
API cookies.get(), cookies.getAll(), cookies.set() и cookies.remove() все принимают опцию firstPartyDomain.
При включённой изоляции первого уровня вы должны указать эту опцию, иначе вызов API завершится ошибкой и вернёт отклонение от обещания. Для get(), set(), и remove() вы должны передать строковое значение. Для getAll(), вы также можете передать null здесь, и это получит все файлы cookie, независимо от того, есть ли у них ненулевое значение для firstPartyDomain.
При выключенной изоляции первого уровня параметр firstPartyDomain является необязательным и по умолчанию равен пустой строке. Непустую строку можно использовать для получения или изменения файлов cookie изоляции первого уровня. Аналогично, передача null в качестве firstPartyDomain в getAll() вернёт все файлы cookie.
Типы
-
Представляет информацию об HTTP-cookie.
-
Представляет хранилище файлов cookie в браузере.
-
Представляет причину изменения файла cookie.
-
Представляет состояние «same-site» файла cookie.
Методы
-
Получает информацию об одном файле cookie.
-
Получает все файлы cookie, которые соответствуют заданному набору фильтров.
-
Устанавливает файл cookie с заданными данными файла cookie; может перезаписывать эквивалентные файлы cookie, если они существуют.
-
Удаляет файл cookie по имени.
-
Перечисляет все существующие хранилища файлов cookie.
Обработчики событий
-
Срабатывает при установке или удалении файла cookie.
Совместимость с браузерами
| Рабочий стол | Мобильный | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Хром | Эдж | Фаерфокс | Интернет Эксплорер | Опера | Сафари | WebView Android | Хром Android | Фаерфокс для Android | Опера Android | Сафари на IOS | Samsung Internet | |
Cookie |
Да | 14 | 45 | ? | Да | 14 | ? | ? | 48 | ? | 15 | ? |
CookieStore |
Да | 14 | 45 | ? | Да | 14 | ? | ? | 48 | ? | 15 | ? |
OnChangedCause |
Да | 79 | 45 | ? | Да | Нет | ? | ? | 48 | ? | Нет | ? |
get |
Да | 14 | 45Предоставляет доступ к куки из режима приватного просмотра и контейнерных вкладок с версии 52. |
? | Да | 14HTTPOnly куки не извлекаются. |
? | ? | 48 | ? | 15HTTPOnly куки не извлекаются. |
? |
getAll |
Да | 14Если URL не указан, куки извлекаются только для URL в открытых вкладках. В Хроме это получает все куки на устройстве пользователя. |
45До версии 52 список «tabIds» был пустым, и возвращались только куки из стандартного хранилища куки. Начиная с версии 52, это исправлено, и результат включает куки из режима приватного просмотра и контейнерных вкладок. |
? | Да | 14["Извлекаются только куки из стандартного хранилища куки.", "HTTPOnly куки не извлекаются."] |
? | ? | 48 | ? | 15["Извлекаются только куки из стандартного хранилища куки.", "HTTPOnly куки не извлекаются."] |
? |
getAllCookieStores |
Да | 14Всегда возвращает то же стандартное хранилище куки с ID 0. Все куки принадлежат этому хранилищу. |
45До версии 52 отображалось только стандартное хранилище куки. Начиная с версии 52, также доступны хранилища куки для режима приватного просмотра и контейнерных вкладок. |
? | Да | 14Всегда возвращает то же стандартное хранилище куки с ID 0. |
? | ? | 48 | ? | 15Всегда возвращает то же стандартное хранилище куки с ID 0. |
? |
onChanged |
Да | 79 | 45 | ? | Да | Нет | ? | ? | 48 | ? | Нет | ? |
remove |
Да | 14 | 45До версии 56 эта функция не удаляла куки из режима приватного просмотра. Начиная с версии 56, это исправлено. |
? | Да | 14 | ? | ? | 48До версии 56 эта функция не удаляла куки из режима приватного просмотра. Начиная с версии 56, это исправлено. |
? | 15 | ? |
sameSiteStatus |
Да | 79 | 63 | ? | Нет | 14Поддерживает только явное. |
? | ? | 63 | ? | 15Поддерживает только явное. |
? |
set |
Да | 14 | 45До версии 56 эта функция не изменяла куки в режиме приватного просмотра. Начиная с версии 56, это исправлено. |
? | Да | 14 | ? | ? | 48До версии 56 эта функция не изменяла куки в режиме приватного просмотра. Начиная с версии 56, это исправлено. |
? | 15 | ? |
Примеры расширений
Примечание: Этот API основан на API chrome.cookies Chromium. Данная документация взята из cookies.json кода Chromium.
© 2005–2023 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies