第一種情況:同源請求時,開啟攜帶憑據傳輸后,會自動攜帶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";