介绍
介绍
福哥发现在某些客户的电脑的Chrome浏览器上平台无法正常登录了,经分析找到了问题所在,是浏览器无法创建Cookie了
再仔细分析,发现了原来是这个SameSite属性捣的鬼,这个属性在顶级页面(top)和内嵌页面(iframe)的网址的域名不一致的话,就会出现这个错误,出发点是为了防止跨站Cookie引发的安全问题
但是如果我们需要在这样的情况创建Cookie怎么办呢?
教程
解决
解决方法就是在创建cookie的时候,指定SameSite=None告知浏览器这条cookie不需要检查SameSite
php
php7.3(不含)之前的版本
header('Set-Cookie: tongfunet=fuge; Path=/; Expires=Session; Domain=tongfu.net; SameSite=None; Secure');
php7.3(含)之后的版本
setcookie('tongfunet', 'fuge', array('path'=>'/', 'expires'=>0, 'domain'=>'tongfu.net', 'samesite'=>'None', 'secure'=>true));
验证
开启Chrome浏览器的SameSite功能
通过自己的脚本去测试Cookie是否可以正常创建
创建Cookie的php代码
setcookie("tongfunet", "福哥", array('expires'=>0, 'path'=>"/", 'domain'=>"", 'secure'=>true, 'httponly'=>false, 'samesite'=>"None"));
查看Cookie值
注意
这个新属性只有在新版本的Chrome才会支持,因此上说我们只要给 >= 80 版本加上特殊判断即可
店大欺客没有办法啊~~
if(preg_match("/[\s\t\r\n]Chrome\/(\d+)/", $_SERVER['HTTP_USER_AGENT'], $rg) && intval($rg[1]) >= 80){ // handle samesite }