Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php “如何修复”;将SameSite cookie设置为“无”;警告_Php_Cookies - Fatal编程技术网

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

Php “如何修复”;将SameSite cookie设置为“无”;警告,php,cookies,Php,Cookies,我创建了一个chrome扩展,并从popup.js中调用了读取cookie的PHP脚本(使用Xhttprequest)。像这样: $cookie_name = "mycookie"; if(isset($_COOKIE[$cookie_name])) { echo $_COOKIE[$cookie_name]; } else{ echo "nocookie"; } 但是我在扩展中的错误中得到了这个警告 与位于(此处为我的域)的跨站点资源关联的cookie设置时没有SameSi

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

$cookie_name = "mycookie";

if(isset($_COOKIE[$cookie_name]))
{
    echo $_COOKIE[$cookie_name];
}
else{
    echo "nocookie";
}
但是我在扩展中的错误中得到了这个警告

与位于(此处为我的域)的跨站点资源关联的cookie设置时没有
SameSite
属性。如果Chrome的未来版本设置为
SameSite=None
Secure
,则只能提供带有跨站点请求的cookie。您可以在应用程序>存储>cookies下查看开发人员工具中的cookies,并在和中查看更多详细信息

我试着做一个这样的饼干,但没有用

setcookie($cookie_name,$cookie_value, time() + 3600*24, "/;samesite=None ","mydomain.com", 1);
遵循问题的说明。

我也在为此进行“反复试验”,但谷歌Chrome实验室Github的回答对我有点帮助。我将它定义到我的主文件中,并且它运行良好,仅适用于一个第三方域。仍在进行测试,但我渴望用更好的解决方案更新此答案:)

编辑:我现在使用的是PHP7.4,这种语法运行良好(2020年9月):


如果您有PHP7.2或更低版本(如下面Robert的回答):

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

如果您的主机已更新为PHP7.3,您可以使用(感谢Mahn的评论):

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

chrome://flags/#cookie-弃用信息


查看以下全部代码:,它们也有
相同站点cookie的代码。

随着新功能的推出,
SameSite=None
cookie也必须标记为
Secure
,否则将被拒绝

你可以找到更多关于这方面变化的信息

注意:与问题不太直接相关,但可能对登陆此处的其他人有用,因为这是我最初在开发网站时关注的问题:

如果您看到问题中列出的一些第三方网站的警告(在我的例子中是google.com,嗯)-这意味着他们需要修复它,这与您的网站无关。当然,除非警告提到您的站点,在这种情况下,添加
Secure
应该可以修复它。

=PHP7.3
>= PHP 7.3

setcookie('key', 'value', ['samesite' => 'None', 'secure' => true]);

< PHP 7.3

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

Emitting javascript

echo "<script>document.cookie('key=value; SameSite=None; Secure');</script>";
setcookie('key','value',['samesite'=>None','secure'=>true]);
我最终通过安装mod_头修复了Chrome 80的Ubuntu 18.04/Apache 2.4.29/PHP 7.2安装:

a2enmod headers
将以下指令添加到Apache VirtualHost配置中:

Header edit Set-Cookie ^(.*)$ "$1; Secure; SameSite=None"
并重新启动Apache:

service apache2 restart

在查看文档()时,我注意到“始终”条件在某些情况下不适用于相同的响应头池。因此,不使用“always”对我来说对PHP很有效,但文档建议,如果您想涵盖所有基础,可以添加带有和不带有“always”的指令。我没有对此进行测试。

如果您遇到OP的问题,您的cookie是使用JavaScript设置的,例如:

document.cookie = "my_cookie_name=my_cookie_value; expires=Thu, 11 Jun 2070 11:11:11 UTC; path=/";
您可以改为使用:

document.cookie = "my_cookie_name=my_cookie_value; expires=Thu, 11 Jun 2070 11:11:11 UTC; path=/; SameSite=None; Secure";

这对我有用。更多信息。

我在项目中同时使用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中设置代理\u Cookie\u路径)

在Firefox中检查结果


有关无法在本地创建PHP会话和使用live domain的用户,请阅读更多信息。 您应该首先删除live sites安全cookie

完整答案;

它还表示“安全”,我猜这意味着https。您可以按照以下示例来解决此问题:您可以使用来管理PHP 5.4+上的cookie,提供一个
setcookie
替换,该替换需要一个额外的参数
$sameSite
。参数可以是
None
Lax
Strict
。一个OOP接口也可用。我正在使用PHP7.3和ried两者(header和setcookie),但当我加载一个带有PayPal脚本的页面时,我仍然会收到相同的警告。。。我仍然在本地主机上,这有什么区别吗?@LuBre-Hmm可能是。我还没有这样测试过,但有道理。另外,您的本地主机是否有SSL?遗憾的是,int不是本地主机的问题,我在网上也遇到了这个警告。我想说这是Paypal方面的事情…感谢您提供新的PHP7.3语法-修复了我的问题7.3 setcookie语法示例,因为答案中的示例弄乱了参数:
setcookie('key','value',['expires'=>time()+(7*24*3600,'path'=>'/','domain'=>'yourdomain.com','samesite'=>'None','secure'=>true','httponly'=>true])
添加一段关于您答案的描述信息OK这是本页上唯一有效且正在生产中的答案:从文档中,数组键应该是小写的:这在PHP5、joomla和chrome中对我有效!谢谢!我不明白为什么我的cookies没有被设置。该死。我花了整个时间一天来,我一直在试图弄清楚为什么samesite在我们的Symfony项目中不起作用。结果我还需要将安全cookie属性设置为true。谢谢!
document.cookie = "my_cookie_name=my_cookie_value; expires=Thu, 11 Jun 2070 11:11:11 UTC; path=/; SameSite=None; Secure";
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
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;
}