#symfony #google-chrome #cookies #samesite
#symfony #google-chrome #файлы cookie #один и тот же сайт
Вопрос:
Эта проблема связана с обновлением Chrome, в котором они принудительно установили SameSite
атрибут (https://www.chromium.org/updates/same-site/incompatible-clients )
Перейдя по этой ссылке, Chrome с 51 по 66 не будет принимать SameSite=None
. Однако в настройках Symfony я установил следующее:
framework:
...
session:
...
cookie_samesite: 'none'
cookie_secure: true
Теперь для клиента Chrome с 51 по 66 я хочу изменить None
на Lax
, так что это должно быть изменено на уровне запроса, я думаю. Часть, как определить версию Chrome, я знаю, но я не уверен, как применить Lax
после обнаружения устройства.
Я не могу изменить на Lax
по умолчанию, потому что веб-сайт может быть iframed.
Есть предложения?
Ответ №1:
Если я вас правильно понял, вам нужно установить 2 файла cookie с одинаковым значением, но с разными именами. Например:
// main cookie
$cookieFirst = Cookie::create("main_cookie")
->withValue("some_value_here")
->withPath("/")
->withExpires(0)
->withSecure(true) // important for chrome if SameSite=None
->withHttpOnly(false) // if you want access via JS
->withRaw(false)
->withSameSite(Cookie::SAMESITE_NONE) // SameSite=None;
// then don't forget to set this cookie to headers
// second cookie
$cookieSecond = Cookie::create("main_cookie.legacy")
->withValue("some_value_here")
->withPath("/")
->withExpires(0)
->withSecure(true) // important for chrome if SameSite=None
->withHttpOnly(false) // if you want access via JS
->withRaw(false)
->withSameSite("") // SameSite=Lax;
// then don't forget to set this cookie to headers too
Я использовал этот подход при реализации связи с использованием iframes между доменами.
Комментарии:
1. на самом деле проблема в том, что он просто устанавливает файл cookie в ответе, в то время как мне нужно изменить файл cookie в запросе. PHPSESSID необходимо изменить перед отправкой в браузер, чтобы я мог определить, должен ли этот файл cookie быть слабым или нет.