Новое в Symfony 6.4: CHIPS Cookie

Источник: «New in Symfony 6.4: CHIPS Cookies»
Такие браузеры, как Google Chrome, постепенно откажутся от поддержки сторонних файлов cookie, начиная с середины 2024 года. Альтернатива называется CHIPS, что является аббревиатурой "Cookies Having Independent Partitioned State".

Браузеры с поддержкой CHIPS cookie позволяют использовать новый атрибут Partitioned при создании cookie с помощью HTTP-заголовка Set-Cookie:

Set-Cookie: cookie-name=cookie-value; SameSite=None; Secure; Path=/; Partitioned;

Когда браузер получает cookie с установленным атрибутом Partitioned, cookie хранится с использованием двух ключей — host key и новый partition key. Рассмотрим пример, в котором не используются файлы cookie CHIPS:

  1. Пользователь посещает сайт https://example-1.com, на котором размещается контент с сайта https://3rd-party.com (который, в свою очередь, устанавливает cookie с сайта https://3rd-party.com);
  2. Пользователь посещает другой сайт https://example-2.com, на котором также размещено содержимое сайта https://3rd-party.com;
  3. Встроенное содержимое сайта https://example-2.com может обращаться к cookie, установленному на сайте https://example-1.com.

Это связано с тем, что файлы cookie хранятся с ключом (так называемым host key), основанным на хосте или доменном имени сайта, который их установил (в приведённом выше примере ключ — 3rd-party.com).

При использовании CHIPS cookie-файлов все происходит по-другому:

  1. Пользователь посещает сайт https://example-1.com, в который встраивается контент с сайта https://3rd-party.com (который, в свою очередь, устанавливает cookie с сайта https://3rd-party.com, включающий атрибут Partitioned);
  2. Для хранения cookie используются два ключа: {("https://example-1.com"), ("3rd-party.com")} (первый — partition key, второй — host key);
  3. Пользователь посещает другой сайт https://example-2.com, на котором также размещено содержимое сайта https://3rd-party.com;
  4. Встроенное содержимое https://example-2.com не может получить доступ к cookie, установленному на https://example-1.com, так как разделённый ключ (которым является https://example-1.com) не совпадает.

В Symfony 6.4/7.0 добавлена поддержка CHIPS cookie в компоненте HttpFoundation. На практике cookie теперь содержат флаг partitioned, который можно установить при их создании:

use Symfony\Component\HttpFoundation\Cookie;

$cookie = new Cookie('cookie-name', 'cookie-value', '...', partitioned: true);

// или:
$cookie = Cookie::fromString('cookie-name=cookie-value; ...; Partitioned;');

// или:
$cookie = ...
$cookie->withPartitioned();

Кроме того, с помощью нового метода можно проверить, является ли cookie — CHIPS cookie:

$isPartitioned = $cookie->isPartitioned();

Узнать больше о CHIPS cookie:

В ближайшие месяцы работа с cookie сторонних разработчиков претерпит значительные изменения. Благодаря постоянным обновлениям Symfony ваши приложения могут подготовиться к этому заранее.

Дополнительные материалы

Предыдущая Статья

Регулярные выражения в JavaScript

Следующая Статья

Новая CSS функция light-dark() для переключения цвета темы