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.cookie
API無法訪問帶有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-Cookie
header中接受。這些cookie可以被視為"domain-locked"。__Secure-
:如果cookie明白包含此前綴,則僅當它也用Secure
屬性標記,是從安全源發送的,它才在Set-Cookie
header中接受。此前綴限制弱於__Host-
前綴。- 帶有這些前綴的cookie,如果不符合其限制的會被瀏覽器拒絕。
參考:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Cookies
關聯cookie知識點:Cookie的HttpOnly、secure、domain屬性