diff --git a/6-data-storage/01-cookie/article.md b/6-data-storage/01-cookie/article.md index a8cde54a48..438bda7eb5 100644 --- a/6-data-storage/01-cookie/article.md +++ b/6-data-storage/01-cookie/article.md @@ -39,7 +39,7 @@ alert( document.cookie ); // cookie1=value1; cookie2=value2;... ## 写入 document.cookie -我们可以写入 `document.cookie`。但是这不是一个数据属性,它是一个访问者。 +我们可以写入 `document.cookie`。但是这不是一个数据属性,它是一个访问者(getter/setter)。赋值操作会被特殊处理。 **浏览器的 `document.cookie` 写入操作只会更新已存在的 cookies,而不会影响其他 cookies。** @@ -52,10 +52,10 @@ alert(document.cookie); // 展示所有 cookies 如果你运行了代码,你很可能会看到多个 cookies。这是因为 `document.cookie=` 操作不是重写整个 cookies。它只设置代码中提到的 cookie `user`。 -从技术层面看,cookie 的名称和值会有很多种类型,但是为了保持格式有效,它们应该使用 `encodeURIComponent` 内置方法来编码一下: +从技术层面看,cookie 的名称和值能是任何字符,为了保持格式有效,它们应该使用 `encodeURIComponent` 内置方法来编码一下: ```js run -// 特殊值,需要编码 +// 特殊字符(空白符),需要编码 let name = "my name"; let value = "John Smith" @@ -115,9 +115,12 @@ alert(document.cookie); // 没有 user ……但是如果我们想要批准像 `forum.site.com` 这样的子域名访问,这是可以做到的。我们应该明确设置 `domain` 选项为根域名:`domain=site.com`: ```js -// 在 site.com 中, 设置 cookie 在任何子域名下可以访问: +// 在 site.com 中 +// 使 cookie 在其任何子域名下可以访问: document.cookie = "user=John; domain=site.com" +// 之后 + // 在 forum.site.com alert(document.cookie); // 也存在 user ``` @@ -189,17 +192,17 @@ document.cookie = "user=John; secure"; 想象一下,你登录了 `bank.com` 网站。此时:你有了该站点的身份验证 cookie。你的浏览器会随着每次请求把它发送到 `bank.com`,因此,`bank.com` 承认你的身份和你做出的所有敏感经济操作。 -现在,在另外一个窗口浏览网页时,你偶然访问了另外一个网站 `evil.com`,该网站自动提交了一个表单 `