如何修复“将 SameSite cookie 设置为无”警告?

新手上路,请多包涵

我创建了一个 chrome 扩展,并从 popup.js 我调用了读取 cookie 的 PHP 脚本(使用 Xhttprequest)。像这样:

 $cookie_name = "mycookie";

if(isset($_COOKIE[$cookie_name]))
{
    echo $_COOKIE[$cookie_name];
}
else{
    echo "nocookie";
}

但是我在扩展错误时收到此警告。

与(Here is my domain)的跨站点资源关联的 cookie 设置为没有 SameSite 属性。如果设置了 SameSite=NoneSecure ,未来的 Chrome 版本将只提供带有跨站点请求的 cookie。您可以在应用程序>存储>Cookies 下的开发人员工具中查看 cookie,并在 https://www.chromestatus.com/feature/5088147346030592https://www.chromestatus.com/feature/5633521622188032 中查看更多详细信息。

我试图创建一个这样的cookie,但没有帮助。

 setcookie($cookie_name,$cookie_value, time() + 3600*24, "/;samesite=None ","mydomain.com", 1);

按照 这个 问题的说明。

原文由 Danilo Ivanovic 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 609
2 个回答

我也在为此“反复试验”,但来自 Google Chrome Labs 的 GitHub 的这个答案对我有所帮助。我将它定义到我的主文件中并且它工作 - 很好,只适用于一个第三方域。仍在进行测试,但我渴望用更好的解决方案更新这个答案:)

我现在使用的是 PHP 7.4,这种语法运行良好(2020 年 9 月):

 $cookie_options = array(
  'expires' => time() + 60*60*24*30,
  'path' => '/',
  'domain' => '.example.com', // leading dot for compatibility or use subdomain
  'secure' => true, // or false
  'httponly' => false, // or false
  'samesite' => 'None' // None || Lax || Strict
);

setcookie('cors-cookie', 'my-site-cookie', $cookie_options);


如果您有 PHP 7.2 或更低版本(如下 Robert 的回答):

setcookie('key', 'value', time()+(7*24*3600), "/; SameSite=None; Secure");

如果您的主机已经更新到 PHP 7.3 ,您可以使用(感谢 Mahn 的评论):

 setcookie('cookieName', 'cookieValue', [
  'expires' => time()+(7*24*3600,
  'path' => '/',
  'domain' => 'example.com',
  'samesite' => 'None',
  'secure' => true,
  'httponly' => true
]);

您可以尝试检查 cookie 的另一件事是启用下面的标志,用他们自己的话来说,它“将为可能受此更改影响的每个 cookie 添加控制台警告消息”:

chrome://flags/#cookie-deprecation-messages

查看完整代码: https ://github.com/GoogleChromeLabs/samesite-examples/blob/master/php.md,他们也有 same-site-cookies 的代码。

原文由 Dimas Pante 发布,翻译遵循 CC BY-SA 4.0 许可协议

我在我的项目中同时使用 JavaScript Cookie 和 Java CookieUtil,以下设置解决了我的问题:

JavaScript Cookie

 var d = new Date();
d.setTime(d.getTime() + (30*24*60*60*1000)); //keep cookie 30 days
var expires = "expires=" + d.toGMTString();
document.cookie = "visitName" + "=Hailin;" + expires + ";path=/;SameSite=None;Secure"; //can set SameSite=Lax also

JAVA Cookie (在 Nginx 中设置 proxy_cookie_path)

 location / {
   proxy_pass http://96.xx.xx.34;
   proxy_intercept_errors on;
   #can set SameSite=None also
   proxy_cookie_path / "/;SameSite=Lax;secure";
   proxy_connect_timeout 600;
   proxy_read_timeout 600;
}

在 Firefox 中检查结果 在此处输入图像描述

阅读更多关于 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite

原文由 Hailin Tan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题