При переходе вашего сайта на секционированные файлы cookie вы можете столкнуться с неожиданным поведением, если для любого конкретного клиента присутствуют как секционированные, так и неразделенные файлы cookie с одинаковыми именами.
Установка разделенного файла cookie не отменяет и не заменяет существующий неразделенный файл cookie с тем же именем. Оба будут существовать, пока включены сторонние файлы cookie, но в отдельных банках файлов cookie. Если сторонние файлы cookie отключены, будут приниматься только разделенные файлы cookie. Если присутствуют оба файла cookie, невозможно программно определить, какой из них секционирован, а какой нет, и это может привести к неожиданному поведению.
Есть два возможных варианта решения этой проблемы: 1. Удалить срок действия файла cookie, который вы заменяете. 2. Переименовать файлы cookie.
Ключевые соображения
При переходе на секционированные файлы cookie имейте в виду следующее:
- Невозможно программно определить, является ли файл cookie, отправленный в HTTP-запросе, секционированным или несекционированным. Однако вы можете определить состояние секционирования файла cookie в Chrome DevTools. Вы можете различать разделенные и неразделенные файлы cookie, не имеющие атрибута
HttpOnly
с помощью API CookieStore . - Разделенные файлы cookie не перезаписывают неразделенные файлы cookie — два абсолютно одинаковых файла cookie (то есть имеют одинаковые атрибуты, такие как имя, домен или путь) будут рассматриваться как отдельные файлы cookie, если только один из них имеет атрибут
Partitioned
. - Лучше всего избегать ситуации, когда в одном сетевом вызове возвращаются как секционированный файл 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 с именем «example», вы можете перенести его в разделенный файл 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 аутентификации.
При переходе вашего сайта на секционированные файлы cookie вы можете столкнуться с неожиданным поведением, если для любого конкретного клиента присутствуют как секционированные, так и неразделенные файлы cookie с одинаковыми именами.
Установка разделенного файла cookie не отменяет и не заменяет существующий неразделенный файл cookie с тем же именем. Оба будут существовать, пока включены сторонние файлы cookie, но в отдельных банках файлов cookie. Если сторонние файлы cookie отключены, будут приниматься только разделенные файлы cookie. Если присутствуют оба файла cookie, невозможно программно определить, какой из них секционирован, а какой нет, и это может привести к неожиданному поведению.
Есть два возможных варианта решения этой проблемы: 1. Удалить срок действия файла cookie, который вы заменяете. 2. Переименовать файлы cookie.
Ключевые соображения
При переходе на секционированные файлы cookie имейте в виду следующее:
- Невозможно программно определить, является ли файл cookie, отправленный в HTTP-запросе, секционированным или несекционированным. Однако вы можете определить состояние секционирования файла cookie в Chrome DevTools. Вы можете различать разделенные и неразделенные файлы cookie, не имеющие атрибута
HttpOnly
с помощью API CookieStore . - Разделенные файлы cookie не перезаписывают неразделенные файлы cookie — два абсолютно одинаковых файла cookie (то есть имеют одинаковые атрибуты, такие как имя, домен или путь) будут рассматриваться как отдельные файлы cookie, если только один из них имеет атрибут
Partitioned
. - Лучше всего избегать ситуации, когда в одном сетевом вызове возвращаются как секционированный файл 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 с именем «example», вы можете перенести его в разделенный файл 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 аутентификации.