Если cookie не устанавливается из-за SameSite, пользователь может успешно войти, но следующий запрос снова считает его гостем. Это часто проявляется при отдельном API-домене, внешнем OAuth callback, iframe или переходе между схемами HTTP и HTTPS.
Не исправляйте проблему безусловным SameSite=None для всех cookie. Нужно определить реальный cross-site сценарий, включить Secure и ограничить область cookie, сохранив защиту от межсайтовых запросов.
Проверьте причину блокировки в браузере
DevTools показывает Set-Cookie и конкретное предупреждение, почему значение не сохранено или не отправлено.
- Set-Cookie присутствует, но запись не появляется в Storage.
- Cookie сохраняется, однако отсутствует в запросе к API.
- Вход работает при прямом открытии домена, но не внутри iframe.
- Проблема появляется только после перехода с внешнего провайдера.
Почему возникает проблема
SameSite оценивается вместе с Secure, схемой, host, методом запроса и контекстом верхней страницы.
- SameSite=None используется без обязательного Secure.
- Cookie записана для другого Domain или Path.
- Frontend-запрос не отправляет credentials.
- CORS не разрешает credentials для конкретного origin.
- Reverse proxy сообщает приложению неправильную схему HTTP.
Пошаговая диагностика
Тестируйте на реальных origin, а не только на localhost.
- Изучите Set-Cookie и предупреждение браузера.
- Сравните site, origin, scheme, domain и path запроса.
- Проверьте credentials на клиенте и CORS-заголовки сервера.
- Проследите redirect login и callback без потери cookie.
- Проверьте forwarded proto и HTTPS-настройки приложения.
Выберите минимально необходимый режим
SameSite должен соответствовать архитектуре, а не отключаться глобально.
- Lax подходит многим обычным сессиям верхнего уровня.
- Strict ограничивает межсайтовые переходы сильнее.
- None нужен для подтвержденного cross-site сценария и требует Secure.
- Чувствительные действия дополнительно защищаются CSRF-механизмом.
Как исправить проблему
Исправьте origin, HTTPS и область cookie до расширения SameSite.
- Настройте Secure, HttpOnly, Domain и Path для нужной сессии.
- Укажите корректный SameSite только этой cookie.
- Включите credentials на клиенте и точный CORS origin.
- Передавайте исходную HTTPS-схему через proxy.
- Добавьте CSRF-защиту для state-changing запросов.
Как проверить результат
- Cookie сохраняется и отправляется только нужному домену.
- Сессия работает после OAuth callback и API-запроса.
- HttpOnly и Secure остаются включенными.
- Чужой origin не получает credentialed-доступ.
Типичные ошибки
- Ставить SameSite=None всем cookie.
- Использовать wildcard origin вместе с credentials.
- Отключать Secure на production.
- Расширять Domain на все поддомены без необходимости.
Как предотвратить повторение
- Документируйте origin и назначение каждой cookie.
- Тестируйте вход в основных браузерах.
- Проверяйте proxy headers после переноса.
- Добавьте тесты CORS и CSRF.
Когда нужна помощь
Если браузер блокирует cookie из-за SameSite, я разберу домены, redirect, CORS и proxy, настрою сессию так, чтобы вход работал без ослабления Secure, HttpOnly и CSRF-защиты.