5. Проброска cookie

В сентябре 2019 года компания Apple презентовала ITP 2.3, принудительно удаляющий 3rd-party cookie через 7 дней. Google также ограничивает некоторые аспекты 3rd-party cookie и анонсировал в будущих обновлениях блокировку 3rd-party cookies по умолчанию в браузере. Mozilla уже блокирует 3rd-party cookie по умолчанию с 2019 года. Вполне вероятно, что другие браузеры также внедряют ограничения 3rd-party cookies или имеют таковые планы.

Как это влияет на вас?

При использовании Safari подразумевается, что если пользователь не посещал ваш сайт 7 или более дней, хранящаяся cookie, по которой платформа идентифицирует пользователя) будет удалена. Таким образом, вернувшийся пользователь будет воспринят как новый. Последствия будут значительными: количество пользователей Safari будет завышено, что повлияет на несколько аспектов работы платформы, в том числе эффективность рекламных кампаний и отчетность. Чтобы преодолеть данное ограничение, необходимо передавать SLID-cookie с вашего сервера, делая ее 1st-party, что в свою очередь позволит ей избежать влияния новых ограничений.

Данные ограничения работают аналогичным образом в любом браузере, ограничивающим 3rd-party cookies. В будущем, в процессе разработки могут появиться различия в деталях реализации ограничений.

Решение заключается в установке SLID cookie бэкэнд-приложением, обслуживающим ваш вебсайт на домене. Cookie-файлы, установленные таким образом, воспринимаются как 1st-party (собственные cookie домена, а не сторонние), не попадают под действие Intelligent Tracking Prevention (Apple ITP) и могут иметь пролонгированный срок жизни. Установка проходит в два шага:

  1. Проверка наличия текущих cookie у пользователя.

  2. Обработка cookie в соответствии с одним из сценариев ниже:

    1. Если у пользователя есть cookie с именем _slid_server, срок её жизни необходимо обновить до одного года. Значение идентификатора остаётся тем же.

    2. Если у пользователя есть cookie с именем _slid и нет cookie с именем _slid_server, необходимо скопировать идентификатор из cookie с именем _slid в новую cookie с именем _slid_server.

Пример:

Допустим, значение _slid cookie — 63317316ce625bd9270b6442. Необходимо продублировать это значение в новую cookie _slid_server и установить срок жизни 31556951 как максимальное значение атрибута. Результат: _slid_server=63317316ce625bd9270b6442;max-age=31556951

Ставить cookie необходимо с корневого домена в формате ".yourdomain.ru"

Сценарий взаимодействия

  1. Пользователь заходит на ваш сайт;

  2. Ваш сервер (бэкенд-приложение) получает запрос на показ страницы в браузере. Запросы от вернувшихся пользователей включают _slid cookie;

  3. Приложение сервера воспроизводит следующие шаги:

    1. Проверяет, есть ли в запросе _slid cookie;

    2. Проверяет, есть ли в запросе _slid_server cookie;

    3. Если в запросе только _slid cookie, дублирует ее как новую _slid_server cookie. Если в запросе обе - переходит к шагу 3.4 без дублирования;

    4. Возвращает новую cookie как заголовок ответа со сроком жизни 1 год. Эти действия устанавливают _slid_server cookie как 1st-party серверную cookie. Таким образом, ее срок жизни уже нельзя будет принудительно уменьшить (имейте ввиду, что _slid cookie будет и далее возвращаться, этого менять не нужно);

  4. Теперь, после сопоставления идентификаторов, пользователь будет видеть отрендеренный для него контент. Таким образом данные о пользователе не будут потеряны, даже если он не был на сайте более 7 дней.

Примеры кода

>>> curl -v http://yoursite.example.com --cookie "_slid=63317316ce625bd9270b6442"                                                                                                                                                                                                                                                                                        19:55:13
*   Trying 172.217.18.4...
* TCP_NODELAY set
* Connected to yoursite.example.com (172.217.18.4) port 80 (#0)
> GET / HTTP/1.1
> Host: yoursite.example.com
> User-Agent: curl/7.64.1
> Accept: */*
> Cookie: _slid=63317316ce625bd9270b6442
>
< HTTP/1.1 200 OK
< Date: Mon, 30 Mar 2020 16:55:16 GMT
...
< Content-Type: text/html; charset=ISO-8859-1
...
< Set-Cookie: _slid_server=63317316ce625bd9270b6442; expires=Wed, 29-Apr-2021 16:55:16 GMT; path=/; domain=.google.com; Secure

Валидация установки на примере Chrome браузера

Для проверки корректности установки необходимо:

  1. Открыть инструменты разработчика (Command+Option+J) для Mac или Control+Shift+J (Windows, Linux, Chrome OS).

  2. Перейти во вкладку Network

  3. Выбрать Preserve Log и очистить историю

  4. Обновить страницу

  5. В столбце с именами событий найти то, где именем выступает адрес вашего сайта

  6. Перейти в раздел Headers данного события

  7. В подразделе Request headers значения _slid и _slid_server кук должны совпадать

Обратите внимание, что проверка корректности кук невозможна через раздел Applications инструментов разработчика, так как в этом разделе включены как куки серверной, так и клиентской стороны и некоторые из них могут быть автоматически удалены Safari.

Last updated