cookie的生命週期
cookie的生命週期能夠經過兩種方式定義:html
- 會話期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
- 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屬性安全