在Symfony中即时更改SameSite Cookie

时间:2020-09-15 14:36:03

标签: symfony google-chrome cookies samesite

此问题与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,因为可以对网站进行格式化。

有什么建议吗?

1 个答案:

答案 0 :(得分: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

在域之间使用iframe实现通信时,我使用了这种方法。