Переход от неразделенных к разделенным файлам cookie

При переходе вашего сайта на секционированные файлы cookie вы можете столкнуться с неожиданным поведением, если для любого конкретного клиента присутствуют как секционированные, так и несекционированные файлы cookie с одинаковыми именами.

Установка разделенного файла cookie не отменяет и не заменяет существующий неразделенный файл cookie с тем же именем. Оба будут существовать, пока включены сторонние файлы cookie, но в отдельных банках файлов cookie. Если сторонние файлы cookie отключены, будут приниматься только разделенные файлы cookie. Если присутствуют оба файла cookie, невозможно программно определить, какой из них секционирован, а какой нет, и это может привести к неожиданному поведению.

Есть два возможных варианта решения этой проблемы: 1. Удалить срок действия файла cookie, который вы заменяете. 2. Переименовать файлы cookie.

Ключевые соображения

При переходе на секционированные файлы cookie имейте в виду следующее:

  1. Невозможно программно определить, является ли файл cookie секционированным или нет. Однако вы можете определить состояние секционирования файла cookie в Chrome DevTools.
  2. Разделенные файлы cookie не перезаписывают неразделенные файлы cookie — два абсолютно одинаковых файла cookie (то есть имеют одинаковые атрибуты, такие как имя, домен или путь) будут рассматриваться как отдельные файлы cookie, если только один из них имеет атрибут Partitioned .
  3. Лучше всего избегать ситуации, когда в одном сетевом вызове возвращаются как секционированный файл cookie, так и неразделенный файл cookie с одним и тем же именем.

Срок действия файлов cookie, которые вы заменяете, истекает.

Если ваш сайт или служба не могут принять изменение имени, вы можете создать новый разделенный файл cookie, пока истечет срок действия существующего неразделенного файла cookie. Хотя невозможно определить, секционирован ли файл cookie, заголовки Set-Cookie без атрибута Partitioned не влияют на файлы cookie, которые не секционированы.

В следующем примере показано, как истечь срок действия неразделенного файла cookie под названием example и оставить незатронутыми все разделенные файлы cookie, даже если они имеют одно и то же имя. Новый разделенный файл cookie с именем cookieName будет добавлен или обновлен, если он уже существует.

Set-Cookie: example=-1;HttpOnly;SameSite=None;Secure;Max-Age:0
Set-Cookie: cookieName=value;Secure;SameSite=None;MaxAge=34560000;Partitioned

Переименуйте файлы cookie

Самый надежный способ обеспечить плавный переход — использовать разные имена для секционированных и несекционированных файлов cookie. Например, если у вас есть неразделенный файл cookie с именем «пример», вы можете перенести его в разделенный файл cookie.

Set-Cookie: example-partitioned=value;Secure;SameSite=None;MaxAge=34560000;Partitioned

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

Поддерживать как разделенные, так и неразделенные файлы cookie.

В течение переходного периода рассмотрите возможность сохранения двух отдельных синхронизированных файлов cookie: секционированного и нет. Например, у вас могут быть как auth , так и auth-partitioned файлы cookie, последний из которых был установлен с помощью атрибута Partitioned .

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

  • На клиентах, которые блокируют сторонние файлы cookie, но еще не поддерживают CHIPS: ни один файл cookie не будет принят.
  • На клиентах, которые блокируют сторонние файлы cookie и поддерживают CHIPS: файл cookie auth будет отклонен, но auth-partitioned файл cookie будет принят.
  • На клиентах, которые не блокируют сторонние файлы cookie, независимо от того, поддерживают ли они CHIPS: принимаются как auth , так и auth-partitioned .

Когда вашему приложению необходимо прочитать файл cookie аутентификации, вам следует сначала поискать auth-partitioned ; но если вам нужно временно отменить изменение, вы можете вернуться к поиску файла cookie auth .

После того, как вы установили, что файлы cookie большинства пользователей обновлены, auth-partitioned можно удалить, а атрибут Partitioned можно добавить к обычному файлу cookie аутентификации.