正確使用cookie中的domain

2021-08-21 13:37:44 字數 3064 閱讀 2959

看規則,嘗試使用規則,記錄問題,多次使用使之熟練。今天發現vue中的this.$router.push()不熟悉了。做記錄並不代表不會忘,只是為了能夠理清邏輯,加深印象。

本文內容有複製貼上其他博主的內容,在此謝過了。

今天遇到乙個不新但是不常用的技術:cookie。做統一登入平台,要求實現統一登入平台登入之後,其他平台都可以直接登入進入登入狀態,不用再登入了。他們提的技術方案是用cookie,對於這個cookie我是不怎麼熟悉的,因為很多在本地存資料的方案我都是直接用的sessionstorage或者localstorage,今天有一點倒是我以前沒有想到,沒有用到的,sessionstorage在乙個頁面存入之後,在同乙個瀏覽器的其他網頁是不會有的,所以導致只能用cookie,至於有沒有其他更好的方案就有待研究了。

引用內容

所謂的單一登入是指使用者在乙個站點如www.studyez.com登入後切換到另乙個站點communty.studyez.com時也自動 被community的server判斷為已經登入,反過來,只要使用者在community.studyez.com登出後,切換到 www.studyez.com時後www的server也會判斷到這一使用者已經登出。

限制條件:

1.所有要求單點登入的站點間共享同一使用者資料庫,這點應該不需要任何解釋的吧。

2. 要求所有站點在同一父網域名稱之下。這裡所說的單點登入是指在同乙個網域名稱下不同子網域名稱之間的單點登入,直接的例子就是像這樣的站點之間的跨站單點登 錄: www.studyez.com, community.studyez.com, serach.studyez.com, mail.studyez.com, mms.studyez.com 等, 他們屬於乙個共同的父網域名稱studyez.com, 之所以有這麼多子網域名稱,是因為有很多子系統的時候用不同的子網域名稱對於開發、部署和管理都能方便很多, 而且對於使用者訪問量很大的站點,可能每個子網域名稱都會有很多的伺服器來伺服。這是比較符合目前很多站點的模式和需求的。

對於非同一父網域名稱下的網域名稱間跨站登入,最好的方式是採用passport的原理來實現,具體實現可以參考passport文件,因此不在本文討論範圍之內。

原理:

不同的子網域名稱之間實現單點登入的最佳途徑是採用cookie的forms認證。他的原理簡單的來說,就是讓forms authentication生成的cookie能夠跨網域名稱訪問。

先談一下cookie的限制,對於乙個任何http request來說,提交給server端的時候,它能夠安全訪問的cookie的網域名稱必須在這個http reuqest的網域名稱路徑中。舉例來說,發出乙個的 請求時,隨著這個http request一塊傳送到server端的cookies會自動包括所有 以 community.corp.studyez.com, .corp.studyez.com, corp.studyez.com, .studyez.com, studyez.com 為網域名稱的cookies,這是由cookie本身的規範所限制的,瀏覽器如果不是按照這個規範實現,那麼就會存在嚴重安全漏洞,因為那樣的話意味著任何一 個伺服器都可以讀到同乙個使用者訪問別的**時留下的cookie。

根據上面所述cookie的限制性,可以得出,對於前面 www.studyez.com, community.studyez.com等站點的例子來說,就是想辦法如何讓 forms authentication生成的cookie的網域名稱限定為.studyez.com或者studyez.com,而不是預設的 www.studyez.com 和 communty.studyez.com,這樣就使得單一登入需求的實現成為可能。

domain的含義為域,分為子域和父域,子域可以訪問本級網域名稱及父級網域名稱的下的cookie

假設有兩個網域名稱

a.b.e.f.com.cn  以下用網域名稱1指代此網域名稱

c.d.e.f.com.cn   以下用網域名稱2指代此網域名稱

在網域名稱中,所有網域名稱進行分級,也就是說網域名稱1與網域名稱2都是f.com.cn的子網域名稱,f.com.cn又是com.cn的子網域名稱

在網域名稱1所使用的服務中,可以設定網域名稱

a.b.e.f.com.cn

b.e.f.com.cn

e.f.com.cn

f.com.cn

於網域名稱1下的cookie,網域名稱2可以拿到e.f.com.cn,f.com.cn這兩個domain下的cookie,網際網路上說的單點登入,就是以這個原理實現的。

比如網域名稱1設定設定domain為e.f.com.cn的cookie,mykey=myvalue1。

而在網域名稱二中設定domain為c.d.e.f.com.cn的cookie,mykey=myvalue2。

此時在網域名稱2服務端能拿到兩個cookie都為mykey=myvalue,並不存在覆蓋一說。

注意在網域名稱2中如果設定domain為e.f.com.cn的cookie,mykey=myvalue3.此時會覆蓋域為e.f.com.cn的mykey的值,即瀏覽器中,同乙個域,只存在乙個名為mykey的cookie。

先說第乙個問題,如果不顯示設定cookie,那麼瀏覽器會生成乙個只針對當前網域名稱的cookie,什麼叫只針對當前網域名稱呢?

如果有乙個網域名稱就是e.f.com.cn,在該網域名稱下設定的cookie如果沒有顯示domain,在回寫瀏覽器的時候瀏覽器會特殊處理,如果是火狐,你會發現該cookie的資訊,有乙個主機項,而域項消失了,在chrome中,雖然有域這個項,但是域的前面少了乙個點,就是上面所說的,如果顯示宣告,不管域中帶不帶點,到chrome中,都是帶點儲存的,只有非顯式宣告域的cookie,瀏覽器儲存才是不帶點的,問題就在這,在e.f.com.cn服務主機中生成的cookie,只有e.f.com.cn的伺服器能拿到,此時子網域名稱是拿不到這個cookie得。

document.cookie=`username=$;domain=30.18.22.75;`
一開始沒有設定path,但是我vue的專案中配置了靜態資源的預設路徑

dev: ;domain=30.18.22.75;path=/;`
至於cookie的配置這些用另外乙個部落格記錄。

正確使用 cookie 的 path

cookie 有路徑 path,表示哪些路徑下的檔案有許可權讀取該 cookie。path 應該以 結尾,同名 cookie,不同 path,屬不同的 cookie document.cookie n1 1 path path document.cookie n1 2 path path docum...

正確使用 cookie 的 path

cookie 有路徑 path,表示哪些路徑下的檔案有許可權讀取該 cookie。path 應該以 結尾,同名 cookie,不同 path,屬不同的 cookie document.cookie n1 1 path path document.cookie n1 2 path path docum...

怎樣正確的使用Cookie的Path詳細解析

cookie 有路徑 path,表示哪些路徑下的檔案有許可權讀取該 cookie。path 應該以 結尾,同名 cookie,不同 path,屬不同的 cookie document.cookie n1 1 path path document.cookie n1 2 path path docum...