Cookies и локальное хранилище
Что ActionPulse записывает в браузер посетителя: cookie не используются, полный перечень ключей localStorage и sessionStorage, где хранится согласие и что писать в политику.
На этой странице
Короткий ответ, с которого обычно начинается заполнение политики: на сайте
посетителя 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 | техническое состояние записи сессии | до закрытия вкладки |
Три замечания, которые чаще всего приходится вносить в существующий текст:
- Раздел про cookie нужно дополнить, а не переименовать. Обязанность информировать посетителя относится к любому хранению данных на его устройстве, а не только к cookie. Если в политике перечислены исключительно cookie, локальное хранилище в ней просто отсутствует.
- Не относите эти записи к «сторонним». Все ключи создаются кодом на вашей странице в хранилище вашего домена. Домен приёма получает запросы, но ничего в браузер не записывает.
- Категория — аналитика, не «строго необходимые». Записи существуют для аналитики, поэтому они уместны только после согласия. Технически это и обеспечивается: до согласия трекер в хранилище не пишет.
Cookie кабинета ActionPulse
Это отдельная история: она касается ваших сотрудников, которые входят в кабинет, а не посетителей вашего сайта. К политике cookies вашего сайта отношения не имеет.
| Что | Значение |
|---|---|
| Имя | pp_rt |
| Назначение | продление сессии в кабинете |
| Флаги | HttpOnly, SameSite=Lax, Secure при работе по HTTPS |
| Путь | только маршруты аутентификации — на остальные запросы не отправляется |
| Срок | 30 дней |
Токен доступа в кабинете хранится только в памяти страницы, а в localStorage
кабинета лежат исключительно несекретные подсказки интерфейса: признак активной
сессии, последняя открытая организация и проект, выбранная тема.
Что проверить
- Откройте сайт в новом приватном окне и не нажимайте ничего в баннере.
В инструментах разработчика не должно быть ни ключей
pp_*в хранилище, ни cookie от ActionPulse, ни запросов к приёму. - Дайте согласие. Появляются
pp_anon_idиpp_session; раздел cookie по-прежнему пуст. - Перезагрузите страницу и убедитесь, что запросы продолжают идти. Если они прекратились — CMP не сообщает решение повторно, и это самая частая ошибка интеграции.
- Отзовите согласие и убедитесь, что все ключи
pp_*исчезли. - Сверьте перечень из раздела про политику с текстом на вашем сайте: лишние строки про cookie и IP-адреса нужно убрать, строки про локальное хранилище — добавить.