Feb 27

为解决Chrome引发的cross site cookes问题:SameSite=None; Secure 雨

, 20/02/27 19:10 , 技术开发 » PHP , 评论(0) , 引用(0) , 阅读(2975) , Via 本站原创 | |
这个问题,我调查了很久记录一下。分享给有缘人。

首先看看SameSite=None; Secure设置方法:
php新版本可以直接在setcookie中设置,这里只发老版本:
header("Set-Cookie: $cookie_name=$zhoz_code; SameSite=None; Secure");

Js:
//set cookies
function setCookie(name,value) {
  var Days = 30;
  var exp = new Date();
  var topDomain = getTopDomain();
  exp.setTime(exp.getTime() + Days*24*60*60*1000);
//  document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString() + "; domain=" + topDomain + ";path=/";
  document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString() + "; domain=" + topDomain + ";path=/;SameSite=None;Secure";
}

附加一下Js高级写法,js变量传给php,看不懂就算了。
var search = window.location.search;
var js_sid = getParamString('sid', search);
var xmlHttp;
if (typeof(js_sid) != "undefined" && js_sid != '') {
  xmlHttp=new XMLHttpRequest();
  if (xmlHttp!=null) {
    var url="/zhoz_track.php?acode=&js_sid="+js_sid+"&r=" + Math.round(Math.random() * 10000);
    var new_element=document.createElement('script');
    new_element.setAttribute('type','text/javascript');
    new_element.setAttribute('src',url);
    document.body.appendChild(new_element);
  }
}

Array
如果您在本网站中设置了cookie,但在第三方网站上进行了POST请求后,再跳回到本站页面时无法获取之前设置的cookie,这可能是由于浏览器的SameSite策略引起的。

SameSite策略是一种用于增强Web安全性的浏览器安全机制,它可以防止跨站点请求伪造(CSRF)攻击。当浏览器检测到跨站点POST请求时,如果该请求来自于另一个域名,则会阻止该请求中的cookie在本站点进行使用。

为了解决这个问题,可以将设置的cookie的SameSite属性设置为None。例如:

//php7.2-
$t = time() + 60 * 60 * 24 * 365 * 10;
//setcookie("agree_use_cookie", 1, $t);
setcookie("agree_use_cookie", 1, $t, "/; SameSite=None; Secure");

//php7.3+
setcookie('agree_use_cookie', '1', [
    'expires' =>$t,
    'path' => '/',
    'secure' => true,
    'samesite' => 'None'
]);

作者:@Everyday NetLog
地址:http://log.zhoz.com/read.php?806
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!

Tags: , ,
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]