域名造成後臺cookie取不到值問題

問題:

網站域名是study.com(例子),請求接口地址是api.study.com,域名不一致,導致後臺取不到前臺設置的cookie。並且chrome中控制檯的請求頭中也不會顯示cookie。

解決方案:

設置cookie時,配置域名

import Cookies from 'js-cookie';
utils.setCookie = (key, value) => {
    let _obj = {
        "expires": 2,
        "domain":  '.baidu.com'
    }
    Cookies.set(key, value, _obj) 
}
域名解釋:
  • 一級域名:又叫頂級域名,一串字符串中間一個點隔開,例如study.com

  • 二級域名:實際上就是一個一級域名以下的主機名,一串字符串中間兩個“.”隔開,例如sin.study.com("sin"就是主機名)。

  • 三級域名:二級域名的子域名,特徵是包含三個“.”,一般來說三級域名都是免費的。

子域名和主域名問題(動態寫域名)
function GetCookieDomain() {
 var host = location.hostname;
 var ip = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
 if (ip.test(host) === true || host === 'localhost') return host;
 var regex = /([^]*).*/;
 var match = host.match(regex);
 if (typeof match !== "undefined" && null !== match) host = match[1];
 if (typeof host !== "undefined" && null !== host) {
  var strAry = host.split(".");
  if (strAry.length > 1) {
   host = strAry[strAry.length - 2] + "." + strAry[strAry.length - 1];
  }
 }
 return '.' + host;
}

cookie的介紹

作用就是用於解決 “如何記錄客戶端的用戶信息”:

  • 當用戶訪問 web 頁面時,他的名字可以記錄在 cookie 中。
  • 在用戶下一次訪問該頁面時,可以在 cookie 中讀取用戶訪問記錄。
屬性名 描述
name Cookie的名稱,Cookie一旦創建,名稱便不可更改
value Cookie的值,如果值爲Unicode字符,需要爲字符編碼。如果爲二進制數據,則需要使用BASE64編碼
expires / maxAge Cookie失效的時間,單位秒。如果爲整數,則該Cookie在maxAge秒後失效。如果爲負數,該Cookie爲臨時Cookie,關閉瀏覽器即失效,瀏覽器也不會以任何形式保存該Cookie。如果爲0,表示刪除該Cookie。默認爲-1。
domain 可以訪問該Cookie的域名。如果設置爲“.study.com”,則所有以“study.com”結尾的域名都可以訪問該Cookie。注意第一個字符必須爲“.”。
path Cookie的使用路徑。如果設置爲“/studyPage/”,則只有contextPath爲“/studyPage”的程序可以訪問該Cookie。如果設置爲“/”,則本域名下contextPath都可以訪問該Cookie。注意最後一個字符必須爲“/”。
secure 該Cookie是否僅被使用安全協議傳輸。安全協議。安全協議有HTTPS,SSL等,在網絡上傳輸數據之前先將數據加密。默認爲false。
comment 該Cookie的用處說明,瀏覽器顯示Cookie信息的時候顯示該說明。
version Cookie使用的版本號。0表示遵循Netscape的Cookie規範,1表示遵循W3C的RFC 2109規範
document.cookie="username=John Doe; expires=2; domain=.study.com";
cookie中的domain

domain表示的是cookie所在的域,默認爲請求的地址,如網址爲www.study.com/study,那麼domain默認爲www.study.com。而跨域訪問,如域A爲t1.study.com,域B爲t2.study.com,那麼在域A生產一個令域A和域B都能訪問的cookie就要將該cookie的domain設置爲.study.com;如果要在域A生產一個令域A不能訪問而域B能訪問的cookie就要將該cookie的domain設置爲t2.study.com。注意:一般在域名前是需要加一個".“的,如"domain=.study.com”。

參考鏈接:https://blog.csdn.net/Paranoid99/article/details/101015172
參考鏈接:https://blog.csdn.net/longgege001/article/details/81274088

發佈了22 篇原創文章 · 獲贊 5 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章