[英]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 的名稱和值,而不是其他屬性,如expires
、 path
、 secure
或domain
。 它由內部的 getter 調用管理,該調用選擇僅顯示每個 cookie 的 key=value 對。
正如在此堆棧溢出答案中提到的,您無法通過document.cookie
訪問其他屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.