cookie介紹
當你首次登入網站時,你會輸入使用者名稱和密碼。在後臺,網站的伺服器驗證這些憑據是否正確。一旦確認你的身份無誤,伺服器就會建立一個Cookie,並將其傳送到你的瀏覽器。這瞭解Cookie登入:原理、實踐與安全指南個Cookie包含了一個獨特的身份驗證令牌,它代表了你的登入會話。而這個包含使用者一些資訊的小型資料片段,就是Cookie。
跨站和跨域
兩個Url的一級域名與二級域名相同就屬於同站
兩個Url的協議或是域名或埠號不同那就跨域了,跨域判斷比跨站判斷嚴格很多。
Cookie操作
再瀏覽器中輸入document.cookie就可以得到部分的cookie資訊,獲取到的是一個字串,使用split(‘;’)將它及逆行切割,它的序列化方式是k1=v1;k2=v2;k3=v3
而瀏覽器中實際儲存的可不止這四條cookie只要httpOnly被打上了鉤那麼使用JS是無法獲取到這個cookie的,這種cookie只能用瀏覽器和服務端來進行操作,通常做種cookie使用來儲存一些與使用者身份資訊或是安全相關憑證。
在瀏覽器中增加一條cookie的值也是使用document.cookie來進行操作
而要變更一條cookie的值是與新增是一樣的,只要將需要變更的key值進行重新賦值就可以了,而刪除操作就需要將cookie的key值設為空,同時將max-age=-1
程式碼執行後cookie面板的對應的這條cookie就會消失
Cookie的屬性
key&value
每個cookie都有它對應的鍵名和值,獲取cookie對應值的時候,可以把document.cookie返回的字串使用split(‘;’)進行分割分割後每條cookie都是kv對,把他們存入物件之後就可以比較方便的獲取了使用了
domain
domain是cookie能做作用的主機地址,domain裡面的東西非常多,首先domain不攜帶主機和埠,這個地方埠不同。協議不同都不會影響cookie,但是cookie的部分屬性只有在HTTPS下才能生效
我們在https://a.com中寫下了四個cookie
開啟http://a.com這四個cookie依然存在,當把埠號改成1234的時候http://a.com:1234這四個cookie還是存在。這就是cookie的特性不區分協議和埠。
細心的同學已經發現了,有的domain最前面有一個點,有的沒有。有點的domain就表示這個cookie可以作用於當前域及其子域。如果我們在新增cookie的時候沒有帶上domain,那麼這個cookie只能作用於當前域。 但是當我們設定domain=a.com它的作用域卻是.a.com,當我們設定domain=.a.com時它的作用域也是.a.com這點要記好。
最後就是在子域裡面可以給父域設cookie,那麼我們可以在a.com中獲取到這個cookie,也可以在b.a.com獲取到這個cookie,因為這個cookie是作用於a.com及其子域的。但是我們是不能從父域給子域設定domain,也不能跨域設定domain。
Path
path用來指定URL的路徑,比如在a.com/a設定一個cookie這個cookie的path是/a,那麼在a.com/a/b這個頁面就也有這個cookie而在a.com/b這個頁面就沒有。
Expires & max-age
expires在指定時間失效 max-age多少秒之後失效 這兩個屬性同時存在時,max-age的優先順序更高 max- age=- 1 刪除cookie,0也是刪除 max-age=60 則60秒之後刪除cookie
當一個cookie既不設定expires又不設定max-age,那麼這個cookie就是一個會話cookie,當瀏覽器被關閉時,這個cookie將會被清除。
httpOnly
httpOnly時和cookie安全性緊密相關的屬性,前面說到過h't't'pOnly被打上了鉤那麼使用JS是無法獲取到這個cookie的,這種cookie只能用瀏覽器和服務端來進行操作的。帶有htppOnly的cookie只能由服務端透過響應標頭中的set-cookie種在瀏覽器上面,js是無法獲取到的。
Secure
secure這個屬性告訴瀏覽器這個cookie只能用https協議傳輸,如果服務端的響應的從cookie中有secure這個屬性,而當前頁面的協議是http的,那麼這個瀏覽器會忽略掉這個cookie。
這裏我們在https協議的頁面下建立一個帶有secure的cookie,當我們向https://a.com發起請求的時候就會攜帶上這個cookie,而當向http://a.com發起請求的時候就不會有這個cookie的
Samesite
samesite屬性可以限制跨站請求時cookie的傳送。samesite的值是none,lax或者strict中的一個:
None不論是否跨站都發送cookie,雖然None是約束性最弱的,但是隻有它是透過https協議進行傳輸時,瀏覽器才認為它有效,另外它必須要新增secure屬性,不然將無法儲存在瀏覽器上
Strict跨站不帶cookie
Lax預設值,部分情況下攜帶cookie。具體情況如下表