К содержанию
ActionPulse

Cookies и локальное хранилище

Что ActionPulse записывает в браузер посетителя: cookie не используются, полный перечень ключей localStorage и sessionStorage, где хранится согласие и что писать в политику.

Кому
Тем, кто заполняет политику cookies и баннер согласия
Проверено
На этой странице

Короткий ответ, с которого обычно начинается заполнение политики: на сайте посетителя ActionPulse не ставит ни одной cookie. Всё, что нужно трекеру, лежит в localStorage и sessionStorage того же origin, а решение о согласии вообще нигде не сохраняется — оно живёт только в памяти открытой страницы.

Ниже перечислено каждое место, куда трекер записывает данные, с точным содержимым и сроком жизни, — в том виде, в котором это можно перенести в документ.

Что используется, а что нет

Механизм Используется Где
Cookie на сайте посетителя нет —
Cookie третьих сторон нет —
localStorage да origin вашего сайта
sessionStorage да, только для записей сессий origin вашего сайта
Память страницы да состояние согласия и текущая очередь событий
Отпечаток браузера нет —
Cookie в кабинете ActionPulse да, одна отдельный домен кабинета

Cookies: ни одной, и это проверяемо

Функция записи в хранилище в трекере намеренно не имеет резервного варианта через cookie: если localStorage недоступен, значение просто не сохраняется. Комментарий в коде формулирует это как правило — средства управления браузерным хранилищем нельзя обходить подстановкой cookie.

К cookie API в трекере есть ровно одно обращение, и оно только удаляет одноимённые cookie, оставшиеся от версий, которые их когда-то ставили. Чтения cookie в коде трекера нет вообще. Удаление срабатывает в двух точках: когда сбор разрешён (миграция старого состояния) и когда согласие отозвано (очистка). До получения согласия cookie не трогаются вовсе — это зафиксировано отдельным тестом.

Полный перечень ключей хранилища

Ключ Хранилище Что внутри Когда появляется Срок жизни
pp_anon_id localStorage UUID анонимного посетителя при первом собранном событии до очистки хранилища, reset() или отзыва согласия
pp_user_id localStorage ваш user_id, переданный в identify после identify то же
pp_session localStorage UUID сессии и метка последней активности при первом собранном событии значение перезаписывается; новая сессия после 30 минут без событий
pp_buffer_v2 localStorage очередь неотправленных событий, не более 200 когда события не удалось отправить сразу до успешной отправки
pp_buffer localStorage наследие старых версий не создаётся удаляется при запуске
pp_replay_sample:<сессия> sessionStorage результат розыгрыша выборки записи только при включённых записях сессий до закрытия вкладки
pp_replay_seq:<префикс>:<сессия> sessionStorage номер последнего отправленного фрагмента записи то же до закрытия вкладки

Важное уточнение для графы «срок»: у localStorage браузерного срока действия не существует в принципе. Значение не «истекает через 90 дней» — оно живёт, пока его не удалит посетитель, ваш код или отзыв согласия. Если в политике нужен срок, корректная формулировка — «бессрочно, до очистки данных сайта».

Ключа с согласием в этом списке нет, и это не упущение — см. следующий раздел.

Смысл идентификаторов и правила сессии разобраны отдельно, в статье про идентификацию; здесь только факт хранения.

Где хранится согласие

Состояние согласия — переменная в памяти загруженной страницы. Ни cookie, ни localStorage, ни sessionStorage для него не используются: ключа для согласия в трекере не существует. На стороне ActionPulse записи о согласии посетителя тоже нет — сервер такое поле не принимает и не хранит.

Отказ тоже не запоминается. Страница с data-consent="required" после перезагрузки снова находится в состоянии ожидания: сбор не начнётся, но зафиксированного «нет» в трекере не появится. Хранить отказ — тоже работа CMP.

Полное поведение до и после решения посетителя описано в руководстве по согласию.

Что происходит при очистке хранилища

Действие Последствие
Посетитель очистил данные сайта появляется новый pp_anon_id — это новый посетитель в отчётах
Очищен только pp_user_id события снова анонимные до следующего identify
Потерян pp_buffer_v2 неотправленные события теряются безвозвратно
Потерян pp_session следующее событие начинает новую сессию
Вызван reset() удаляются pp_user_id, pp_anon_id, pp_session, выдаётся новый анонимный идентификатор
Отозвано согласие удаляются все ключи pp_*, включая данные записей сессий

История, уже принятая сервером, при очистке хранилища не удаляется и не обезличивается: браузер теряет только связь с ней. Удаление принятых данных — отдельная процедура, см. удаление данных субъекта.

Если посетитель ранее прошёл identify, очистка хранилища не разрывает связь на сервере: связка «анонимный идентификатор — пользователь» осталась там. Именно поэтому при выходе из аккаунта нужен reset(), а не только очистка.

Приватный режим и заблокированное хранилище

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

Если запись в localStorage запрещена настройками браузера или расширением, трекер не подменяет её ни cookie, ни чем-либо ещё и продолжает работать только в памяти страницы. Практические следствия:

  • события продолжают отправляться — сбор не ломается;
  • каждая загрузка страницы даёт нового анонимного посетителя;
  • сессия не переживает переход между страницами;
  • неотправленные события не сохраняются между загрузками.

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

Что указать в политике cookies

Готовая основа. Проверьте формулировки со своим юристом: приведённые назначения описывают поведение продукта, а не правовое основание обработки.

Что записывается Тип Назначение Срок
pp_anon_id локальное хранилище, first-party различение посетителей в аналитике до очистки данных сайта
pp_user_id локальное хранилище, first-party связь событий с аккаунтом после входа до очистки данных сайта или выхода
pp_session локальное хранилище, first-party границы визита до очистки; сессия истекает через 30 минут неактивности
pp_buffer_v2 локальное хранилище, first-party доставка событий при обрыве сети до успешной отправки
pp_replay_sample:*, pp_replay_seq:* хранилище сессии, first-party техническое состояние записи сессии до закрытия вкладки

Три замечания, которые чаще всего приходится вносить в существующий текст:

  1. Раздел про cookie нужно дополнить, а не переименовать. Обязанность информировать посетителя относится к любому хранению данных на его устройстве, а не только к cookie. Если в политике перечислены исключительно cookie, локальное хранилище в ней просто отсутствует.
  2. Не относите эти записи к «сторонним». Все ключи создаются кодом на вашей странице в хранилище вашего домена. Домен приёма получает запросы, но ничего в браузер не записывает.
  3. Категория — аналитика, не «строго необходимые». Записи существуют для аналитики, поэтому они уместны только после согласия. Технически это и обеспечивается: до согласия трекер в хранилище не пишет.

Это отдельная история: она касается ваших сотрудников, которые входят в кабинет, а не посетителей вашего сайта. К политике cookies вашего сайта отношения не имеет.

Что Значение
Имя pp_rt
Назначение продление сессии в кабинете
Флаги HttpOnly, SameSite=Lax, Secure при работе по HTTPS
Путь только маршруты аутентификации — на остальные запросы не отправляется
Срок 30 дней

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

Что проверить

  1. Откройте сайт в новом приватном окне и не нажимайте ничего в баннере. В инструментах разработчика не должно быть ни ключей pp_* в хранилище, ни cookie от ActionPulse, ни запросов к приёму.
  2. Дайте согласие. Появляются pp_anon_id и pp_session; раздел cookie по-прежнему пуст.
  3. Перезагрузите страницу и убедитесь, что запросы продолжают идти. Если они прекратились — CMP не сообщает решение повторно, и это самая частая ошибка интеграции.
  4. Отзовите согласие и убедитесь, что все ключи pp_* исчезли.
  5. Сверьте перечень из раздела про политику с текстом на вашем сайте: лишние строки про cookie и IP-адреса нужно убрать, строки про локальное хранилище — добавить.