在Javascript(角度)中设置Cookie:分号问题

时间:2018-10-22 07:29:36

标签: javascript html angular web cookies

当我遇到一个看似奇怪的问题时,我试图用Angular中的TypeScript设置cookie。

我只是想将一些信息存储在cookie中以供以后使用(仅用于测试目的)。我所做的就是执行以下行:

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

但是如果我随后执行document.cookie,则结果如下:

"Cookie: token=_value_"

我希望结果是:

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

它只会删除字符串中分号后的所有内容。如果我将其更改为逗号,则所有内容都将正确连接。 所以分号一定有问题吗?但是在每个cookie的“教程”中,他们都使用这种语法。 我尝试了很多事情,例如对分号值进行编码等等。我确定对此有一个简单的答案?

1 个答案:

答案 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的名称和值,而不是expirespath,{{1} }或secure。它由内部的getter调用管理,该调用选择只显示每个cookie的key = value对。

this stack overflow answer中所述,您无法通过domain访问其他属性。