设置请求头中携带cookie,但是不起作用的几种情况总结,针对于客户端解决。
第一种情况:同源请求时,开启携带凭据传输后,会自动携带Cookie信息。
①fetch中需要配置credentials为same-origin
-
omit
: 默认值,忽略cookie的发送 -
same-origin
: 表示cookie只能同域发送,不能跨域发送 -
include
: cookie既可以同域发送,也可以跨域发送
fetch("url", {
method: 'POST(GET)',
credentials: "same-origin" })
.then({});
②ajax同源传输默认自带Cookie
第二种情况:跨域,大多数未携带的情况为跨域请求。
①fetch中需要配置credentials为include
-
omit
: 默认值,忽略cookie的发送 -
same-origin
: 表示cookie只能同域发送,不能跨域发送 -
include
: cookie既可以同域发送,也可以跨域发送
fetch("url", { method: 'POST(GET)', credentials: "include" }) .then({});
②ajax中需要开启withCredentials为true
$.ajax({ type: "POST", url: `xxx`, dataType: "application/x-www-form-urlencoded", xhrFields: {withCredentials: true},//支持跨域发送cookies crossDomain:true,//发送Ajax时,Request header 中会包含跨域的额外信息,但不会含cookie success: function (data) { if (data) { callback(data) } } });
第三种情况,http发送到https服务,首先肯定是跨域请求,其次https是默认不接收http传输的Cookie的,所以在上面操作的基础上,我们需要改下Cookie配置。
设置secure为false,实现了cookie的跨协议传递,但是有被窃听的风险。
document.cookie = "name=EX;expires=60*24*7;secure=false";