Возникла ситуация, что в какой-то момент времени на некоторых браузерах перестал открываться фрейм с другим нашим сервисом. Как выяснилось проблема была в версии 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";
}