# Cookies and browser storage

Актуально на 21 августа 2026 года. Этот документ описывает фактическое поведение текущего кода, а не будущую функциональность.

## Кратко

- Публичный сайт `srs-postline.com` не создаёт cookies и не сохраняет идентификаторы в `localStorage` или `sessionStorage`.
- Dashboard `app.srs-postline.com` создаёт одну обязательную first-party cookie после успешного входа по email-коду.
- Рекламных, аналитических, сторонних и cross-site tracking cookies нет.
- Баннер согласия не нужен, пока отсутствует необязательное хранилище. Если оно появится, оно должно быть выключено до действительного согласия пользователя.

## Фактическая cookie

| Поле | Значение | Зачем |
|---|---|---|
| Имя | `postline_session` | Авторизация запросов dashboard |
| Создание | Только после успешной проверки одноразового кода | Пользователь явно инициировал вход |
| Срок | До 30 дней | Совпадает со сроком серверной сессии |
| `HttpOnly` | `true` | JavaScript страницы не может прочитать токен |
| `SameSite` | `Lax` | Ограничивает межсайтовую отправку cookie |
| `Secure` | `true` в production | Передача только по HTTPS |
| `Path` | `/` | Сессия доступна всем маршрутам dashboard |
| `Domain` | Не задаётся | Host-only cookie; не распространяется на другие поддомены |

В cookie хранится случайный токен с префиксом `pls_`. API сохраняет только HMAC-SHA256 hash токена. При logout, недействительном формате токена или ответе API `401` dashboard удаляет cookie (`Max-Age=0`).

## Что произойдёт при блокировке

Публичный сайт продолжит работать. Вход в dashboard и авторизованные запросы dashboard работать не будут. Язык и валюта публичного сайта не требуют постоянного browser storage; выбор валюты живёт только до ухода со страницы.

## Источники истины и проверки

- Конфигурация: `apps/dashboard/src/lib/auth-session.ts`.
- Установка: `apps/dashboard/src/app/api/auth/verify-code/route.ts`.
- Удаление: logout, middleware и dashboard API proxy.
- Публичные переводы: `apps/marketing/src/app/[locale]/[slug]/content/legal-corrections.ts`.
- Автоматические проверки: `auth-session.test.ts` и `legal-content.test.ts`.

Перед добавлением аналитики, A/B-тестов, chat widgets или внешних embeds нужно обновить этот реестр, Privacy Notice и Cookie Policy во всех 11 локалях, классифицировать storage и реализовать consent gating до загрузки необязательных скриптов.
