如何使用chrome扩展API为子域设置cookie?

cqoc49vn  于 2022-12-06  发布在  Go
关注(0)|答案(2)|浏览(180)

cookie.set API将url作为其参数之一接收,并根据该参数计算cookie的domainpath
例如,如果url的值为https://stackoverflow.com,则domainstackoverflow.com,而path/
问题是,如何设置带有stackoverflow子域的cookie:.stackoverflow.com。换句话说,我们想要一个domain值为.stackoverflow.com的cookie
我试过两种方法,都不管用。

  1. { url: https//*.stackoverflow.com }
  2. { url: https//.stackoverflow.com }
djmepvbi

djmepvbi1#

你的意思是,如果你想设置.stackoverflow.com,实际上是为所有子域设置一个cookie。
根据我的经验,API方法chrome.cookie.set将为以下两种情况设置cookie:域和所有子域,当您指定域:

chrome.cookies.set({ 
  url: 'https//stackoverflow.com/?sth', 
  domain: 'stackoverflow.com', 
  name: 'some_cookie', 
  value: 'cookie_value' 
})

将导致为该页面创建两个Cookie:

  1. some_cookie:cookie_value:stackoverflow.com
  2. some_cookie:cookie_value:.stackoverflow.com
    要仅为主域设置cookie,您应该设置URL,并让Chrome根据该URL设置域。
oxalkeyp

oxalkeyp2#

您可以使用{ url: "https//stackoverflow.com", domain: ".stackoverflow.com" }
在Google Chrome版本107.0.5304.88上测试
如果省略域,则域将是仅主机,如stackoverflow.com;如果指定域,则域将始终是子域,如.stackoverflow.com
请https://developer.chrome.com/docs/extensions/reference/cookies/#method-set
我们可以通过chrome.cookies.set中的domain字段来区分域和子域,但在chrome.cookies.remove中却不能区分它们,因为它只接受urlnamestorageId,而不接受domain字段。
因此,如果我们只想删除其中的一个,我们可以像这样使用chrome.cookies.set

chrome.cookies.set({ ...cookie, domain: cookie.domain.startsWith('.') ? domain : undefined, expirationDate: 0 })

相关问题