此问题与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
,因为可以对网站进行格式化。
有什么建议吗?
答案 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实现通信时,我使用了这种方法。