Cookie 屬性

網路伺服器回應資源要求時,可以在回應中加入 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。可能的值包括:StrictLaxNone

瞭解詳情:什麼是第三方 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 是分開的。

這張圖表顯示,兩個嵌入相同第三方的不同網站,將不再共用該第三方的 Cookie。
透過 Cookie 分區,嵌入某個頂層網站時設定的第三方服務 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-AgeExpires 屬性,系統會在目前工作階段結束時刪除 Cookie。這類 Cookie 有時也稱為「工作階段 Cookie」

網域

如果 Set-Cookie 標頭具有 Domain 屬性,系統會將 Cookie 納入對指定網域及其任何子網域的要求中。

如果 Set-Cookie 標頭沒有 Domain 屬性,系統就不會在對子網域的要求中加入 Cookie。

換句話說,加入 Domain 屬性會減少網域限制。

舉例來說,如果網站 cats.example 的回應如下:

  • Set-Cookie:cat=tabby
    只有對 cats.example 的要求才會包含 Cookie
  • Set-Cookie:cat=tabby; Domain=cats.example
    系統會將 Cookie 納入對 cats.example 的要求,以及對子網域 (例如 fluffy.cats.exampleuser.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。

示範

工具

瞭解詳情