关于Cookie的属性SameSite你知道多少

发表于 2020-08-03 18:55:07
阅读 52

介绍

介绍

福哥发现在某些客户的电脑的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功能

ebf3017247a8e1f8.jpg通过自己的脚本去测试Cookie是否可以正常创建

创建Cookie的php代码

setcookie("tongfunet", "福哥", array('expires'=>0, 'path'=>"/", 'domain'=>"", 'secure'=>true, 'httponly'=>false, 'samesite'=>"None"));

查看Cookie值

3d4f3afdcbed6106.jpg

注意

这个新属性只有在新版本的Chrome才会支持,因此上说我们只要给 >= 80 版本加上特殊判断即可

店大欺客没有办法啊~~

if(preg_match("/[\s\t\r\n]Chrome\/(\d+)/", $_SERVER['HTTP_USER_AGENT'], $rg) && intval($rg[1]) >= 80){
    // handle samesite
}