問題:
網站域名是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