cookies

允許擴充套件程式獲取、設定和移除 cookie,並在 cookie 發生更改時收到通知。

Permissions

要使用此 API,擴充套件程式必須在其 manifest.json 檔案中指定 "cookies" API 許可權,併為想要訪問其 cookie 的任何網站指定 主機許可權。擴充套件程式可以獲取、設定或移除任何可以透過匹配主機許可權的 URL 讀取、寫入或刪除的 cookie。例如:

http://*.example.com/

擁有此主機許可權的擴充套件程式可以:

  • 讀取 www.example.com 的非安全 cookie,路徑不限。
  • 寫入 www.example.com 的安全或非安全 cookie,路徑不限。

不能

  • 讀取 www.example.com 的安全 cookie。
http://www.example.com/

擁有此主機許可權的擴充套件程式可以:

  • 讀取 www.example.com 的非安全 cookie,路徑不限。
  • 讀取 .example.com 的非安全 cookie,路徑不限。
  • 寫入 www.example.com 的安全或非安全 cookie,路徑不限。
  • 寫入 .example.com 的安全或非安全 cookie,路徑不限。

不能

  • 讀取或寫入 foo.example.com 的 cookie。
  • 讀取或寫入 foo.www.example.com 的 cookie。
*://*.example.com/

擁有此主機許可權的擴充套件程式可以:

  • 讀取或寫入 www.example.com 的安全或非安全 cookie,路徑不限。

跟蹤保護

跟蹤器使用第三方 cookie,即由非您當前訪問的網站設定的 cookie,來識別您訪問過的網站。例如:

  1. 您訪問 a-shopping-site.com,該網站使用 ad-tracker.com 在網上投放廣告。ad-tracker.com 會設定一個與 ad-tracker.com 域名關聯的 cookie。當您在 a-shopping-site.com 上時,ad-tracker.com 會收到您瀏覽過的產品資訊。
  2. 現在您訪問 a-news-site.com,該網站使用 ad-tracker.com 投放廣告。ad-tracker.com 讀取其 cookie,並利用從 a-shopping-site.com 收集的資訊來決定向您展示哪些廣告。

Firefox 包含兩項防止跟蹤的功能:動態分割槽第一方隔離。這些功能會分隔 cookie,使跟蹤器無法將訪問的網站聯絡起來。因此,在前面的示例中,ad-tracker.com 無法看到在訪問 a-shopping-site.com 時在 a-news-site.com 上建立的 cookie。

從 Firefox 103 開始,動態分割槽是預設使用的功能。但是,如果使用者或擴充套件程式啟用了第一方隔離,它將優先於動態分割槽。

注意:當隱私瀏覽使用動態分割槽時,普通瀏覽可能不會對 cookie 進行分割槽。有關詳細資訊,請參閱 Firefox 中分割槽狀態

儲存分割槽

在使用動態分割槽時,Firefox 會根據頂級網站對 JavaScript API 可訪問的儲存進行分割槽,同時提供對未分割槽儲存的適當訪問以支援常見用例。此功能正在逐步推出。有關實現詳細資訊,請參閱 Firefox 中分割槽狀態

儲存分割槽由頂級網站的模式化 URL 鍵入,並且當動態分割槽處於活動狀態時,該鍵值可透過 cookie API 中的 partitionKey.topLevelSite 屬性訪問,例如 partitionKey: {topLevelSite: "http://site"}

通常,頂級文件儲存在未分割槽的儲存中,而第三方 iframe 儲存在分割槽的儲存中。如果無法確定分割槽鍵,則使用預設值(未分割槽儲存)。例如,雖然所有 HTTP(S) 網站都可以用作分割槽鍵,但 moz-extension:- URL 不能。因此,Firefox 擴充套件文件中的 iframe 不使用分割槽儲存。

預設情況下,cookies.get()cookies.getAll()cookies.set()cookies.remove() 會處理未分割槽儲存中的 cookie。要在這些 API 中處理分割槽儲存中的 cookie,必須設定 partitionKey 中的 topLevelSite。唯一的例外是 getAll,其中設定 partitionKey 而不設定 topLevelSite 會返回分割槽和未分割槽儲存中的 cookie。cookies.onChanged 會針對擴充套件程式可以訪問的任何 cookie(包括分割槽儲存中的 cookie)觸發。為確保正確修改 cookie,擴充套件程式應讀取事件中的 cookie.partitionKey 屬性,並將其值傳遞給 cookies.set()cookies.remove()

第一方隔離

啟用第一方隔離後,cookie 將根據使用者訪問的原始頁面的域進行限定(基本上是使用者在 URL 欄中看到的域,也稱為“第一方域”)。

使用者可以透過調整瀏覽器配置來啟用第一方隔離,擴充套件程式也可以透過 privacy API 中的 firstPartyIsolate 設定來啟用它。請注意,第一方隔離在 Tor Browser 中是預設啟用的。

cookies API 使用 firstPartyDomain 屬性來表示第一方域。在啟用第一方隔離時設定的所有 cookie 都有此屬性設定為原始頁面的域。在前面的示例中,一個 cookie 是 a-shopping-site.com,另一個是 a-news-site.com。當第一方隔離關閉時,網站設定的所有 cookie 的此屬性都將設定為一個空字串。

cookies.get()cookies.getAll()cookies.set()cookies.remove() API 都接受 firstPartyDomain 選項。

當第一方隔離開啟時,您必須提供此選項,否則 API 呼叫將失敗並返回一個被拒絕的 Promise。對於 get()set()remove(),您必須傳遞一個字串值。對於 getAll(),您也可以在此處傳遞 null,這將獲取所有 cookie,無論它們是否具有非空 firstPartyDomain 值。

當第一方隔離關閉時,firstPartyDomain 引數是可選的,預設為空字串。可以使用非空字串來檢索或修改第一方隔離 cookie。同樣,將 null 作為 firstPartyDomain 傳遞給 getAll() 會返回所有 cookie。

型別

cookies.Cookie

表示有關 HTTP cookie 的資訊。

cookies.CookieStore

表示瀏覽器中的 cookie 儲存。

cookies.OnChangedCause

表示 cookie 更改的原因。

cookies.SameSiteStatus

表示 cookie 的同站狀態。

方法

cookies.get()

檢索單個 cookie 的資訊。

cookies.getAll()

檢索與給定過濾器集匹配的所有 cookie。

cookies.set()

使用給定的 cookie 資料設定 cookie;如果存在等效的 cookie,可能會覆蓋它們。

cookies.remove()

透過名稱刪除 cookie。

cookies.getAllCookieStores()

列出所有現有的 cookie 儲存。

事件處理器

cookies.onChanged

在設定或移除 cookie 時觸發。

擴充套件程式示例

瀏覽器相容性

注意:此 API 基於 Chromium 的 chrome.cookies API。本文件源自 Chromium 程式碼中的 cookies.json