当我遇到一个看似奇怪的问题时,我试图用Angular中的TypeScript设置cookie。
我只是想将一些信息存储在cookie中以供以后使用(仅用于测试目的)。我所做的就是执行以下行:
document.cookie = "token=" + value + "; expires=" + date + ";";
但是如果我随后执行document.cookie
,则结果如下:
"Cookie: token=_value_"
我希望结果是:
"Cookie: token=_value_; expires=_date_;"
它只会删除字符串中分号后的所有内容。如果我将其更改为逗号,则所有内容都将正确连接。 所以分号一定有问题吗?但是在每个cookie的“教程”中,他们都使用这种语法。 我尝试了很多事情,例如对分号值进行编码等等。我确定对此有一个简单的答案?
答案 0 :(得分:1)
声明Cookie时,其格式如下:
document.cookie = "key=value; property_1; property_2; ... property_n";
基于this MDN documentation,您一次只能写入一个新的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
,{{1} }或secure
。它由内部的getter调用管理,该调用选择只显示每个cookie的key = value对。
如this stack overflow answer中所述,您无法通过domain
访问其他属性。