Изменение файлов cookie одного и того же сайта на лету в Symfony

#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 быть слабым или нет.