1 回答
TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超5個(gè)贊
您嘗試做的事情并不好,因?yàn)?cookie 不能那樣工作。
首先是簡(jiǎn)單的事情:HttpOnly、Domain 和 Secure:這些值不會(huì)在 HTTP 客戶端請(qǐng)求中傳輸,這些字段c將始終為空。客戶端使用這些字段來確定是否在Cookie標(biāo)頭中發(fā)送(名稱,值)對(duì),但不發(fā)送這些值。
對(duì)于 HttpOnly、Secure(和 SameSite),這無關(guān)緊要,因?yàn)檫@些(以及 MaxAge 和 Expires)對(duì)cookie身份沒有貢獻(xiàn)。
Cookie 身份基于在SetCookie標(biāo)頭中發(fā)送的三元組(域、路徑、名稱)。通常域和路徑是隱含的,但它們確實(shí)在客戶端上定義了值。
現(xiàn)在要?jiǎng)h除具有標(biāo)識(shí)(Domain-X、Path-X、Name-X)的 cookie,您必須發(fā)送具有相同標(biāo)識(shí)(Domain-X、Path-X、Name-X)且 MaxAge=-1 的 cookie。但如上所述,您收到的 cookie不包含域和路徑。
有兩種出路:
您必須知道您的 cookie 是域 cookie 還是主機(jī) cookie,以及它們?cè)O(shè)置的路徑,并使用該信息刪除它們。(我會(huì)推薦這個(gè)。)
刪除所有可能的cookie。在請(qǐng)求路徑
/foo/bar/wuz時(shí),來自客戶端的 cookie 可能來自 path/,/foo或者/foo/bar(如果我沒記錯(cuò)的話;在 RFC 6265 中測(cè)試并查找它)。因此,刪除所有這些路徑的名稱為“Name-X”的 cookie。對(duì)更復(fù)雜的 Domain 屬性執(zhí)行相同的操作。刪除主機(jī) cookie (Domain=="") 并刪除域 cookie (Domain!="")。確保獲得正確的域名(有效 TLD 加一)。
如您所見,2 非常復(fù)雜。但這就是 cookie 的設(shè)計(jì)方式:服務(wù)器應(yīng)該知道服務(wù)器設(shè)置了哪些 cookie,即服務(wù)器應(yīng)該知道其所有 cookie 的 cookie 身份(域、路徑、名稱)??蛻舳说穆氊?zé)是只為某個(gè)請(qǐng)求發(fā)回適當(dāng)?shù)?(Name,Value) 對(duì)。如果服務(wù)器希望刪除一個(gè) cookie,它只需將該 cookie 的 MaxAge 設(shè)置為 -1。請(qǐng)注意,“那個(gè) cookie”是服務(wù)器應(yīng)該知道的,而不是從客戶端請(qǐng)求中推斷出來的。
- 1 回答
- 0 關(guān)注
- 180 瀏覽
添加回答
舉報(bào)
