Feb
27
为解决Chrome引发的cross site cookes问题:SameSite=None; Secure
这个问题,我调查了很久记录一下。分享给有缘人。
首先看看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="=HOST_URL ?>/zhoz_track.php?acode==$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'
]);
首先看看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="=HOST_URL ?>/zhoz_track.php?acode==$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
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!