cookie的生命周期
cookie的生命周期可以通過兩種方式定義:
- 會話期cookie是最簡單的cookie:瀏覽器關閉后會被自動洗掉,會話期cookie不需要指定過期時間(Expires)或者有效期(Max-Age),需要注意的是,有些瀏覽器提供了會話恢復功能,這種情況即使關閉了瀏覽器,會話期cookie也會被保留下來,這會導致cookie的生命周期無限期延長
- 持久性cookie的生命周期取決于過期時間(Expires)或者有效期(Max-Age)指定的一段時間,
- 當Cookie的過期時間被設定時,設定的日期和時間只與客戶端相關,而不是服務端,
限制訪問Cookie
- Secure:標記為Secure的cookie通過被HTTPS協議加密過的請求發送給服務端,可以預防man-in-the-middle攻擊,
- 從Chrome52和firefox 52開始,非Https的站點無法使用Cookie的Secure標記,
- HttpOnly:JavaScript
Document.cookieAPI無法訪問帶有HttpOnly屬性的cookie,此類cookie僅作用于服務器,此屬性有助于緩解跨站點腳本(XSS)攻擊,
Cookie的作用域
- Domain:指定了哪些主機可以接受cookie,如果不指定,默認為origin,不包含子域名,如果指定了Domain,一般包含子域名,
- 當前大多數瀏覽器遵循 RFC 6265,設定 Domain 時 不需要加前導點,瀏覽器不遵循該規范,則需要加前導點,例如:
Domain=.mozilla.org
- 當前大多數瀏覽器遵循 RFC 6265,設定 Domain 時 不需要加前導點,瀏覽器不遵循該規范,則需要加前導點,例如:
- Path:指定了主機下的哪些路徑可以接受cookie,以"/"作為路徑分隔符,子路徑也會被匹配,
- SameSite:允許服務器要求某個cookie在跨站請求時不會被發送,其中Site由可注冊域定義,從而可以組織跨站請求偽造攻擊(CSRF),取值如下:
- None:瀏覽器會在同站請求、跨站請求下繼續發送cookies,不區分大小寫,
- Strict:瀏覽器只在訪問相同站點時發送cookie,
- Lax:與Strict類似,但用戶從外部站點導航至URL時(例如通過鏈接)除外,在新版本瀏覽器中,為默認選項為默認選項,Same-site cookies 將會為一些跨站子請求保留,如圖片加載或者 frames 的呼叫,但只有當用戶從外部站點導航到URL時才會發送,如 link 鏈接,
- 以前,SameSite如果沒有設定,默認行為等同于None,cookies會被包含在任何請求中,包括跨站請求,
- 大多數主流瀏覽器正在將SameSite的默認值遷移到Lax,如果要指定cookie在同站、跨站請求都被發送,需要明確指定SameSite為None,
Cookie prefixes
__Host-:如果cookie名稱具有此前綴,僅當它也用Secure屬性標記,是從安全源發送的,不包含Domain屬性,并將Path屬性設定為/時,它才在Set-Cookieheader中接受,這些cookie可以被視為"domain-locked",__Secure-:如果cookie明白包含此前綴,則僅當它也用Secure屬性標記,是從安全源發送的,它才在Set-Cookieheader中接受,此前綴限制弱于__Host-前綴,- 帶有這些前綴的cookie,如果不符合其限制的會被瀏覽器拒絕,
參考:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Cookies
關聯cookie知識點:Cookie的HttpOnly、secure、domain屬性
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/228833.html
標籤:HTML5
