问题描述
我正在通过Scala(2.10)/ Play Framework(2.3)中的标题设置cookie。我正在考虑以这种方式进行操作,我将不得不更新该框架以使用内置的功能,而这些功能到目前为止是无法实现的。下面是我的代码供参考:
Test URL: https://elbtest.s2d6.com/x/?x=c&z=s&v=7100096
val cookieString = "949413017=533c892b32cf4a46961a38f8c56b33eb320412596|6386|323064|7100096|14988;SameSite=None;Expires=Wed,30 Sep 2020 12:45:30 GMT;Path=/;Domain=s2d6.com;Secure"
val finalURL = "https://www.google.com/"
resp = Redirect(finalURL).withHeaders(SET_COOKIE -> cookieString)
在浏览器中,正在设置上面的cookie' 949413017 ',但还有另一个名为'SameSite'的cookie。因此,我无法在随后的请求中访问我的cookie。 PFA在浏览器中的响应:
Chrome版本:版本84.0.4147.89(正式版本)(64位)
操作系统::Ubuntu 16.04.6 LTS(Xenial Xerus)
我们非常感谢您能理解为什么会发生这种情况。
非常感谢!
解决方法
您正在使用withHeaders
呼叫SET_COOKIE
。您应该使用内置的cookie:
Redirect(finalURL).withCookies(Cookie("theme","blue"))
有关示例,请参见https://blog.knoldus.com/using-cookies-in-play-framework/。
,只是一个提示,如果我们在SameSite=None
值的任何地方使用Set-Cookie header
,则Play Framework会错误地将其视为另一个cookie的开始!
使用标准标头Set-Cookie
怎么办?
Set-Cookie: flavor=choco; SameSite=None; Secure
请参阅https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite