cookie path路徑與domain域

admin發表於2019-08-05

實際開發中,使用cookie可能會出現一些奇怪的現象,或者能實現比較強大的功能。

或許這其中就有path和domain因素在起決定性作用,舉兩個例子:

(1).同一個站點下無法取到其他頁面的cookie。

(2).單點登入功能。

下面將以上面這兩個現象為契機,詳細介紹一下path路徑與domain域的相關知識。

一.path路徑:

同一個站點下無法讀取其他頁面的cookie,舉個例子:

在/ant/index.html頁面中寫入了一個cookie,卻無法在同一個站點下/antzone/index.html頁面中讀取。

很可能是由於/ant/index.html頁面使用預設path路徑,或者設定了一個/antzone/index.html無法讀取的路徑。

路徑設定語法如下:

[JavaScript] 純文字檢視 複製程式碼
document.cookie = "name=value;path=path"

分析如下:

(1).path用來設定cookie生效的目錄,是一個絕對路徑。

(2).只有path目錄和其子目錄下的頁面可以訪問當前cookie。

(3).如果不顯式設定path,那麼預設就是當前頁面所在的目錄。

由於antzone並不是ant的子目錄,是兄弟關係,無法讀取cookie很正常。

解決方案如下:

[JavaScript] 純文字檢視 複製程式碼
document.cookie = "ant=螞蟻部落;path=/"

只要將將ant目錄下的path路徑設定根目錄即可,這樣所有的頁面都可以訪問它的cookie了。

二.domain域:

再來看文章開頭提出的第二個問題,單點登入。

對於大型網站,通常會有多個分站,比如百度,就有貼吧、文庫、站長工具等。

但是你會發現,等你登入其中一個分站的賬號,你會發現所有分站都是有效的,用不著挨個登入。

這就是所謂的單點登入,使用cookie就可以比較方便的實現,那就需要用到domain。

先介紹一下一些域名的相關知識:

(1).softwhy.com是一級域名。

(2).www.softwhy.com是二級域名。

(3).data.softwhy.com是二級域名。

(4).ant.data.softwhy.com是三級域名。

以此類推,上面幾個是不同的獨立的域名,但是主域名都是softwhy.com。

通過domain屬性可以實現cookie的跨域訪問,關鍵點是主域名相同。

語法結構:

[JavaScript] 純文字檢視 複製程式碼
document.cookie="name=value;domain=domain;path=path"

分析如下:

(1).domain屬性用於設定cookie生效的域。

(2).當前cookie會在設定的域和此域的子域中生效。

(3).如果使用預設值,那麼cookie只會在當前頁面所在的域生效。

(4).通常情況下,path路徑設定為根路徑/。

程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼
document.cookie="ant=螞蟻部落;domain=softwhy.com;path=/"

通過上述設定,所有的softwhy.com子域名都會讀取到此cookie。

特別說明:當顯式設定domain的時候,事實上會自動在domain值前面加點(.),例如domain=softwhy.com,事實上值是.softwhy.com,那麼當前cookie對softwhy.com和其子域名都是有效的,如果使用預設值,就不會加點,那麼cookie只對當前域名有效,假設當前頁面的域名是softwhy.com,如果domain採用預設值,千萬不要誤認為當前頁面的cookie對其所有子域名也有效。

相關文章