簡體   English   中英

在 Javascript (Angular) 中設置 cookie:分號問題

[英]Setting up cookie in Javascript (Angular): Issues with semicolon

當我遇到一個看似奇怪的問題時,我試圖在 Angular 中使用 TypeScript 設置 cookie。

我只是想在 cookie 中存儲一些信息供以后使用(僅用於測試目的)。 我所做的就是執行這一行:

document.cookie = "token=" + value + "; expires=" + date + ";";

如果我之后執行document.cookie結果如下:

"Cookie: token=_value_"

我希望結果是:

"Cookie: token=_value_; expires=_date_;"

它只是擦除字符串中分號之后的所有內容。 如果我將它們更改為逗號,則所有內容都會正確連接。 那么分號一定有問題嗎? 但是在每個 cookie 的“教程”中,他們都使用這種語法。 我嘗試了很多東西,比如編碼分號值等等。 我確定對此有一個簡單的答案?

當您聲明 cookie 時,它​​采用以下形式:

document.cookie = "key=value; property_1; property_2; ... property_n";

根據此 MDN 文檔,您一次只能編寫一個新 cookie。 如果你想聲明兩個 cookie,你應該做兩個分配:

document.cookie = "key=value; property_1; property_2; ... property_n";
document.cookie = "key2=value2; property_1; property_2; ... property_n";

現在,為什么在顯示document.cookie時看不到屬性?

這是一種正常的行為。 document.cookie實際上是一個訪問器屬性 這意味着當您使用document.cookie時,JavaScript 將使用 getter 和 setter。 您在代碼中編寫的內容不會是您稍后將閱讀的內容,因為它會分別調用一個 setter 來分配 cookie document.cookie = ...和一個 getter 來顯示document.cookie 一切都由 JavaScript 解釋器內部管理。

在您的情況下,您正在聲明一個具有值和到期日期的cookie 分號; 用於指定您正在創建的 cookie 的其他屬性。

document.cookie = "token=" + value + "; expires=" + date + ";";

你的榜樣聲明一個新的cookie的名稱token ,價值value和物業expires帶有日期載有date變量。 它將調用內部 JavaScript 設置器來設置此 cookie。

現在,如果您使用document.cookie顯示所有 cookie,您將只會獲得每個 cookie 的名稱和值,而不是其他屬性,如expirespathsecuredomain 它由內部的 getter 調用管理,該調用選擇僅顯示每個 cookie 的 key=value 對。

正如在此堆棧溢出答案中提到的,您無法通過document.cookie訪問其他屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM