2

我正在创建一个静态网站(将在 github 页面上发布)并希望使用 cookie 为用户存储网站状态。但是在设置 cookie 时出现以下错误:

Cookie“buttonState”很快就会被拒绝,因为它的“sameSite”属性设置为“none”或无效值,没有“secure”属性。要了解有关“sameSite”属性的更多信息,请阅读https://developer.mozilla.org/docs/Web/HTTP/Headers/Set-Cookie/SameSite

我一直在使用以下 js 代码来设置 cookie:

function set_cookies(jsonObj={},expires="",path="/"){
for(var key in jsonObj){
    var temp = (key+"="+jsonObj[key]+";");
    if(expires!=="")
        temp += ("expires="+expires+";");
    if(path!=="")
        temp+= ("path="+path);
    console.log(temp);
    document.cookie = temp;
  }
}
set_cookies({"buttonState":"compile");

我该如何解决这个问题?

4

1 回答 1

3

我也一直在我们网站上的 cookie 上处理这个问题。您需要附加";sameSite=Lax"到您的临时变量。这就是浏览器现在期望看到的。根据您提供的链接,Mozilla 文档说,Lax 的定义是:

“Cookies 允许与顶级导航一起发送,并将与第三方网站发起的 GET 请求一起发送。这是现代浏览器中的默认值。”

后来,在“无”下,它说:

“None 曾经是默认值,但最近的浏览器版本使 Lax 成为默认值,以便对某些类别的跨站点请求伪造 (CSRF) 攻击具有相当强大的防御能力。”

后来,在其中一个例子下,它说:

“虽然您可以依靠现代浏览器自动应用 SameSite=Lax,但您应该明确指定它以清楚地传达您的意图,即 SameSite 策略适用于您的 cookie。这也将改善跨浏览器的体验,因为并非所有浏览器都默认为 Lax然而。”

于 2020-07-30T19:38:13.597 回答