1. 程式人生 > 其它 >設定請求頭中攜帶cookie,但是不起作用的幾種情況總結,針對於客戶端解決。

設定請求頭中攜帶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";