document.cookie 究竟是如何工作的?
Posted
技术标签:
【中文标题】document.cookie 究竟是如何工作的?【英文标题】:How exactly does document.cookie work? 【发布时间】:2011-10-11 03:22:02 【问题描述】:如果我通过进入控制台并输入 document.cookie;
让 Chrome 向我显示 document.cookie
,它会给我说:
"name=John; gender=male";
但是如果我输入,比如说,document.cookie = 5;
,它所做的只是将5;
添加到字符串的开头,所以我得到:
"5; name=John; gender=male";
如果我尝试document.cookie = null;
,那么它甚至什么都不做。
这怎么可能?这是一个变量,不是吗?那么为什么赋值运算符没有按应有的方式工作呢?它实际上只是一点语法糖而不是真正的变量吗?如果是这样,糖到底掩盖了什么?
【问题讨论】:
顺便说一句,我不知道这个问题的答案,但是许多语言允许运算符(包括在某些情况下的赋值,很奇怪)被自定义行为覆盖。这非常有用,但也可能导致混乱,例如您在此处的内容。 @Matthew:javascript 不是其中之一,除了宿主对象(如document
)几乎可以做任何他们想做的事情,因为它们不是原生对象。
【参考方案1】:
document.cookie
具有 非常 特殊行为。如您所见,分配给它添加(或更新)一个cookie(或多个cookie),而不是替换所有cookie。这很不寻常。
在MDN阅读所有相关信息。
【讨论】:
@Daniel:这里没有异议。我无法想象为什么它需要如此……迟钝,即使在过去也是如此。我的意思是,带有Cookie
元素的类似数组的东西,多么前沿! ;-)
那么这种“不寻常”的行为是如何实现的呢?是在解释器级别还是 javascript 支持某种运算符重定义?
@Jack:document
是 ECMAScript 规范所称的“宿主对象”,而不是本机对象。宿主对象几乎可以做任何他们想做的事情,它们的语义大多在规范之外。最终,the assignment 成为对宿主对象的抽象 PutValue 调用。主机环境(在本例中为浏览器)如何处理取决于主机环境。
我希望我能投票更多...这个信息拯救了我的一天。【参考方案2】:
Why not have a look at MDN?
document.cookies
的赋值运算符右侧的字符串应该是以分号分隔的键值对列表,即document.cookie = "aKey=5"
将设置/更新aKey
cookie。
所以是的,document.cookie
表现出特殊行为。
【讨论】:
我希望我不会在这里挑剔,但你的第一个document.cookie
的复数是故意的吗?我不确定这是否是一个独特的概念。
此外,它现在显示“这篇文章需要技术审查”。尽管如此,它仍然是一个很好的参考页面。谢谢!【参考方案3】:
这是您的“issue”的示例。此外,它还说:
您只需将 cookie 的过期时间更新为 零。
【讨论】:
以上是关于document.cookie 究竟是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章