SameSite появился как расширение спецификации cookie в 2016 году и решает конкретную проблему: исторически браузер отправлял cookie при каждом запросе к её домену – в том числе когда запрос уходил со стороннего сайта через картинку, скрипт или iframe. Этим пользовались и CSRF-атаки, и межсайтовый трекинг. Атрибут в заголовке Set-Cookie позволяет серверу явно указать, в каких межсайтовых сценариях браузеру можно передавать cookie, а в каких – нет. SameSite – механизм чисто технический; юридическая сторона использования cookie – персональные данные, политика конфиденциальности и 152-ФЗ – разобрана в отдельных терминах глоссария.
Как это работает
Сервер задаёт атрибут при установке cookie: Set-Cookie: sessionid=38afes7a8; SameSite=Lax. Дальше при каждом запросе браузер сравнивает сайт, открытый в адресной строке, с сайтом, которому принадлежит cookie, и по значению атрибута решает, отправлять её или нет.
| Значение | Когда cookie отправляется | Типовой сценарий |
|---|---|---|
| Strict | Только в same-site запросах. Даже при переходе по внешней ссылке cookie в первом запросе не уйдёт | Анти-CSRF-токены, админские и банковские сессии |
| Lax | Same-site запросы плюс межсайтовая навигация верхнего уровня безопасным методом (GET/HEAD/OPTIONS). Не отправляется из fetch(), <img>, <script>, iframe и POST-форм с чужого сайта | Сессионные cookie большинства сайтов; значение по умолчанию |
| None | Во всех контекстах, включая межсайтовые, – но только вместе с атрибутом Secure (HTTPS). Без Secure браузер отклонит cookie | Встраиваемые виджеты, iframe, SSO, аналитические и рекламные пиксели |
Если атрибут не указан, современные браузеры трактуют cookie как SameSite=Lax – Chrome перешёл на этот дефолт с версии 80 в феврале 2020 года, тогда же None без Secure стал отклоняться.
У дефолтного Lax есть смягчение – «двухминутное» исключение: cookie, установленная не более двух минут назад, всё же отправится в межсайтовом POST-запросе верхнего уровня. Оно придумано ради платёжных редиректов вроде 3-D Secure и SSO-сценариев, где внешний сервис возвращает пользователя на сайт POST-формой. Важно: окно действует только для cookie без атрибута; явно заданный SameSite=Lax блокирует такую отправку всегда.
Same-site и same-origin – в чём разница
SameSite сравнивает не origin, а site. По определению MDN site – это схема плюс регистрируемый домен (eTLD+1); порт не учитывается. Origin строже: схема, полный хост и порт целиком.
| Случай | Пример | Same-origin | Same-site |
|---|---|---|---|
| Поддомены | www.example.com и static.example.com | Нет | Да – один eTLD+1 |
| Схема | http:// и https:// одного домена | Нет | Нет – схема входит в определение site |
| Порт | example.com и example.com:8443 | Нет | Да – порт не учитывается |
| Public Suffix List | a.github.io и b.github.io | Нет | Нет – github.io в списке публичных суффиксов |
Зачем это нужно
Главная задача SameSite – защита от CSRF, подделки межсайтовых запросов. Классическая атака: жертва залогинена на сайте, злоумышленник заманивает её на свою страницу, и та отправляет скрытую POST-форму на уязвимый сайт – раньше браузер прикладывал к такому запросу cookie жертвы, и действие выполнялось от её имени. Lax отсекает этот основной вектор, Strict дополнительно закрывает переходы по ссылкам. При этом SameSite – дополнительный барьер, а не замена CSRF-токенам: он не спасает от атак с того же сайта, от GET-эндпоинтов с побочными эффектами и от двухминутного окна.
На практике с атрибутом сталкиваются не только при защите форм:
- Авторизация в iframe – личный кабинет или виджет, встроенный на чужой сайт, «разлогинивается»: cookie со Strict или Lax во вложенный межсайтовый iframe не отправляются, и сервер не видит сессию. Нужен
SameSite=None; Secure. - Счётчики и пиксели – Метрика, рекламные пиксели и инструменты сквозной аналитики работают в стороннем контексте, поэтому их межсайтовым cookie требуется
None. Разметка ссылок UTM-метками от cookie не зависит и потому остаётся самым живучим способом передать источник перехода. - Платежи и SSO – возврат POST-запросом с внешнего сервиса не донесёт явную Lax-cookie: сессию для таких редиректов выносят в отдельную cookie с
None; Secure.
Для встраиваемого контента в 2026 голый None – уже не лучшая практика. Рекомендация – добавлять атрибут Partitioned (технология CHIPS): такая cookie получает двойной ключ «домен-установщик + сайт верхнего уровня», виджет хранит состояние на каждом сайте-хозяине отдельно, а межсайтовый трекинг через неё невозможен. С декабря 2025 CHIPS входит в Baseline и работает во всех современных браузерах.
Пример
Четыре типовых заголовка (синтаксис сверен с документацией MDN и web.dev):
Set-Cookie: sessionid=38afes7a8; SameSite=Strict
Set-Cookie: sessionid=38afes7a8; SameSite=Lax
Set-Cookie: widget_session=abc123; SameSite=None; Secure
Set-Cookie: __Host-example=34d8g; SameSite=None; Secure; Path=/; Partitioned;Первая строка – анти-CSRF-токен или админская сессия, вторая – обычная пользовательская сессия, третья – cookie встраиваемого виджета, четвёртая – современный вариант той же виджетной cookie: CHIPS с рекомендованным префиксом __Host-. В PHP начиная с версии 7.3 атрибут задаётся через массив опций:
setcookie('name', 'value', ['samesite' => 'Lax', 'secure' => true]);Рядом с SameSite постоянно всплывает вопрос о судьбе сторонних cookie – и в русскоязычных материалах чаще всего висит застрявшая в 2019 году картина «Chrome вот-вот всё отключит». Актуальный статус на 2026 другой. Chrome сторонние cookie не отключил: в апреле 2025 Google отказался от идеи отдельного запроса на выбор, а 17 октября 2025 в блоге Privacy Sandbox официально подтвердил, что Chrome сохраняет текущий подход – сторонние cookie включены по умолчанию, отключить их можно в настройках. Одновременно Google свернул десять технологий Privacy Sandbox (Topics, Protected Audience, Attribution Reporting API и другие); в развитии остались CHIPS, FedCM и Private State Tokens. Safari при этом полностью блокирует сторонние cookie ещё с 2020 года, а Firefox по умолчанию их партиционирует через Total Cookie Protection. По оценкам consent-платформ, на браузеры без «обычных» сторонних cookie приходится порядка 17–20% трафика – цифра оценочная, но порядок величины ясен: виджеты и трекинг нужно проектировать с расчётом на None плюс Partitioned, не полагаясь на сторонние cookie как на данность.