Блокирование Cookie Chrome

Возникла ситуация, что в какой-то момент времени на некоторых браузерах перестал открываться фрейм с другим нашим сервисом. Как выяснилось проблема была в версии Chrome, в которой Chrome принудительно стали считать не указанный параметр куки SameSite=Lax, что означает блокирование кук, относящихся к другим доменам. Для того, чтобы изменить поведение есть несколько вариантов:

1. на уровне языка, PHP>=7.3

использовать опцию samesite => none в функции setcookie

setcookie($name, $value, [
    'expires' => time() + 86400,
    'path' => '/',
    'domain' => 'domain.com',
    'secure' => true,
    'httponly' => true,
    'samesite' => 'None',
]);

2. для PHP < 7.3 можно использовать баг. Но он работает не везде

setcookie('cookie-name', '1', 0, '/; samesite=strict');

3. Заголовки

Set-Cookie: key=value; path=/; domain=example.org; HttpOnly; SameSite=Lax
или
header("Set-Cookie: key=value; path=/; domain=example.org; HttpOnly; SameSite=Lax");

4. Настройки в Apache или nginx

Apache

Header always edit Set-Cookie (.*) "$1; SameSite=Lax"

Nginx

location / {
    # your usual config ...
    # hack, set all cookies to secure, httponly and samesite (strict or lax)
    proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict";
}

Источники

Leave a comment

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.