網路伺服器回應資源要求時,可以在回應中加入 Set-Cookie
標頭。該標頭會告知瀏覽器儲存 Cookie。例如:Set-Cookie:cat=tabby
。什麼是 Cookie?一文說明瞭 Cookie 的運作方式。
除了提供 Cookie 名稱和值,Set-Cookie
還可以包含屬性,控制是否設定 Cookie,以及 Cookie 的到期時間。Cookie 屬性之間以半形分號分隔。例如:
Set-Cookie:cat=tabby; Secure; HTTPOnly; Expires=Tue, 31 Dec 2999 23:59:59 GMT;
本文將說明最重要的 Cookie 屬性:
使用 HTTP Cookie 一文以更深入的技術細節說明 Cookie 屬性。
安全
如果 Set-Cookie
標頭包含 Secure
,系統只會在採用 HTTPS 通訊協定的加密要求中加入 Cookie,不會在 HTTP 要求中加入 Cookie。這有助於防範中間人攻擊,也就是攻擊者在瀏覽器和伺服器之間的通訊中暗中介入,藉此傳遞資訊,甚至可能竄改資訊。
HTTPOnly
如果 Set-Cookie
標頭包含 HTTPOnly
,JavaScript 就無法存取 Cookie,例如使用 document.cookie
。這有助於防範以 Cookie 為目標的特定類型攻擊。
SameSite
如果要求資源的網站與您造訪的網站不同,就是跨網站要求。為回應跨網站要求而設定的 Cookie 是第三方 Cookie。
SameSite
屬性會控管要求中是否包含第三方 Cookie。可能的值包括:Strict
、Lax
或 None
。
瞭解詳情:什麼是第三方 Cookie?
嚴格
只有在網頁位於 Cookie 的來源網站上時,系統才會傳送 Cookie 來回應要求。舉例來說,假設使用者造訪 cats.example
,且已設定含有 SameSite=Strict
屬性的 Cookie。稍後,使用者瀏覽其他網站,並點選連結前往 cats.example
的頁面。系統不會將設定的 Cookie 納入該要求。
Lax
這與 Strict
的運作方式相同,差別在於使用者點選連結前往 Cookie 的來源網站時,瀏覽器也會一併傳送 Cookie。(在先前的 Strict
範例中,使用者點選 cats.example
的連結時,系統會加入 Cookie。) 如果 Set-Cookie
標頭中未加入任何 SameSite
屬性,則預設為 Lax
。
無
無限制:無論是否為跨網站要求,系統都會在要求中加入 Cookie。使用 SameSite=None
時,Cookie 也必須具備 Secure
屬性。
已分區
這個屬性可讓您選擇將 Cookie 存放在分割儲存空間,每個頂層網站都有各自的「Cookie 罐」。Cookie 會以頂層網站和設定 Cookie 的網域做為雙重鍵值。
舉例來說,假設網站 A 和網站 B 都包含網站 C 的 iframe。網站 A 的 iframe 設定的分區 Cookie 無法由網站 B 的 iframe 存取:AC Cookie 與 BC Cookie 是分開的。

具有 Partitioned
屬性的 Cookie 稱為 CHIPS,也就是具有獨立分區狀態的 Cookie。
分區 Cookie 必須具備 Secure
屬性。
詳情請參閱「具有獨立分區狀態的 Cookie」。
Expires 和 Max-Age
您可以指定 Expires
日期和時間,或以秒為單位的 Max-Age
,之後系統就會刪除 Cookie,且不再傳送。例如:
Set-Cookie:cat=tabby; Expires=Tue, 31 Dec 2999 23:59:59 GMT;
Set-Cookie:cat=tabby; Max-Age=86400
如未指定 Max-Age
或 Expires
屬性,系統會在目前工作階段結束時刪除 Cookie。這類 Cookie 有時也稱為「工作階段 Cookie」。
網域
如果 Set-Cookie
標頭具有 Domain
屬性,系統會將 Cookie 納入對指定網域及其任何子網域的要求中。
如果 Set-Cookie
標頭沒有 Domain
屬性,系統就不會在對子網域的要求中加入 Cookie。
換句話說,加入 Domain
屬性會減少網域限制。
舉例來說,如果網站 cats.example
的回應如下:
Set-Cookie:cat=tabby
只有對cats.example
的要求才會包含 CookieSet-Cookie:cat=tabby; Domain=cats.example
系統會將 Cookie 納入對cats.example
的要求,以及對子網域 (例如fluffy.cats.example
或user.assets.cats.example
) 資源的任何要求
路徑
如果 Path
屬性包含在 Set-Cookie
回應標頭中,則設定的 Cookie 只會包含在符合 Path
值的網址要求中 (在設定 Cookie 的網站上!)。
例如:
Set-Cookie:cat=tabby; Path=/articles
系統會將 Cookie 納入以/articles
開頭的任何網址路徑要求:
✅https://cats.example/articles/tabby/index.html
✅https://cats.example/articles/breeds/tabby/index.html
❎https://cats.example/images/tabby.jpg
❎https://cats.example/en/articles/tabby/index.html
Set-Cookie:cat=tabby; Path=/
對網站上任何網址提出的要求都會包含 Cookie。
如果 Set-Cookie
回應標頭沒有 Path
值,系統只會在對相同目錄發出的要求中加入 Cookie。舉例來說,假設系統在回應 cats.example/images/tabby.jpg.
的要求時設定了 cat=tabby
Cookie。如果沒有設定 Path
,系統只會在要求 cats.example/images
目錄中的檔案時,加入該 Cookie。
示範
- 1pc.glitch.me:第一方 Cookie 示範
- 3pc.glitch.me:第三方 Cookie 示範
工具
瞭解詳情
- 第一方 Cookie 食譜
- 什麼是 Cookie?
- 什麼是第三方 Cookie?
- HTTP 要求和回應
- Cookie 工具
- Cookie 示範
- 使用 HTTP Cookie
- SameSite Cookie 說明
- OWASP:Cookie