К содержанию
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-адреса нужно убрать, строки про локальное хранилище — добавить.