Skip to content

Commit b924c7d

Browse files
committed
docs(bom/cookie): edit cookie
1 parent 53ae0a3 commit b924c7d

File tree

2 files changed

+22
-10
lines changed

2 files changed

+22
-10
lines changed

docs/bom/cookie.md

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@
44

55
Cookie 是服务器保存在浏览器的一小段文本信息,一般大小不能超过4KB。浏览器每次向服务器发出请求,就会自动附上这段信息。
66

7-
Cookie 主要保存状态信息,以下是一些主要用途
7+
HTTP 协议不带有状态,有些请求需要区分状态,就通过 Cookie 附带字符串,让服务器返回不一样的回应。举例来说,用户登录以后,服务器往往会在网站上留下一个 Cookie,记录用户编号(比如`id=1234`),以后每次浏览器向服务器请求数据,就会带上这个字符串,服务器从而知道是谁在请求,应该回应什么内容
88

9-
- 对话(session)管理:保存登录、购物车等需要记录的信息。
9+
Cookie 的目的就是区分用户,以及放置状态信息,它的使用场景主要如下。
10+
11+
- 对话(session)管理:保存登录状态、购物车等需要记录的信息。
1012
- 个性化信息:保存用户的偏好,比如网页的字体大小、背景色等等。
1113
- 追踪用户:记录和分析用户行为。
1214

13-
Cookie 不是一种理想的客户端储存机制。它的容量很小(4KB),缺乏数据操作接口,而且会影响性能。客户端储存应该使用 Web storage API 和 IndexedDB。只有那些每次请求都需要让服务器知道的信息,才应该放在 Cookie 里面。
15+
Cookie 不是一种理想的客户端存储机制。它的容量很小(4KB),缺乏数据操作接口,而且会影响性能。客户端存储建议使用 Web storage API 和 IndexedDB。只有那些每次请求都需要让服务器知道的信息,才应该放在 Cookie 里面。
1416

1517
每个 Cookie 都有以下几方面的元数据。
1618

@@ -20,7 +22,9 @@ Cookie 不是一种理想的客户端储存机制。它的容量很小(4KB)
2022
- 所属域名(默认为当前域名)
2123
- 生效的路径(默认为当前网址)
2224

23-
举例来说,用户访问网址`www.example.com`,服务器在浏览器写入一个 Cookie。这个 Cookie 的所属域名为`www.example.com`,生效路径为根路径`/`。如果 Cookie 的生效路径设为`/forums`,那么这个 Cookie 只有在访问`www.example.com/forums`及其子路径时才有效。以后,浏览器访问某个路径之前,就会找出对该域名和路径有效,并且还没有到期的 Cookie,一起发送给服务器。
25+
举例来说,用户访问网址`www.example.com`,服务器在浏览器写入一个 Cookie。这个 Cookie 的所属域名为`www.example.com`,生效路径为根路径`/`
26+
27+
如果 Cookie 的生效路径设为`/forums`,那么这个 Cookie 只有在访问`www.example.com/forums`及其子路径时才有效。以后,浏览器访问某个路径之前,就会找出对该域名和路径有效,并且还没有到期的 Cookie,一起发送给服务器。
2428

2529
用户可以设置浏览器不接受 Cookie,也可以设置不向服务器发送 Cookie。`window.navigator.cookieEnabled`属性返回一个布尔值,表示浏览器是否打开 Cookie 功能。
2630

@@ -34,9 +38,17 @@ window.navigator.cookieEnabled // true
3438
document.cookie // "id=foo;key=bar"
3539
```
3640

37-
不同浏览器对 Cookie 数量和大小的限制,是不一样的。一般来说,单个域名设置的 Cookie 不应超过30个,每个 Cookie 的大小不能超过4KB。超过限制以后,Cookie 将被忽略,不会被设置。
41+
不同浏览器对 Cookie 数量和大小的限制,是不一样的。一般来说,单个域名设置的 Cookie 不应超过30个,每个 Cookie 的大小不能超过 4KB。超过限制以后,Cookie 将被忽略,不会被设置。
42+
43+
Cookie 是按照域名区分的,`foo.com`只能读取自己放置的 Cookie,无法读取其他网站(比如`bar.com`)放置的 Cookie。一般情况下,一级域名也不能读取二级域名留下的 Cookie,比如`mydomain.com`不能读取`subdomain.mydomain.com`设置的 Cookie。但是有一个例外,设置 Cookie 的时候(不管是一级域名设置的,还是二级域名设置的),明确将`domain`属性设为一级域名,则这个域名下面的各级域名可以共享这个 Cookie。
44+
45+
```http
46+
Set-Cookie: name=value; domain=mydomain.com
47+
```
48+
49+
上面示例中,设置 Cookie 时,`domain`属性设为`mydomain.com`,那么各级的子域名和一级域名都可以读取这个 Cookie。
3850

39-
浏览器的同源政策规定,两个网址只要域名相同,就可以共享 Cookie(参见《同源政策》一章)。注意,这里不要求协议相同。也就是说,`http://example.com`设置的 Cookie,可以被`https://example.com`读取。
51+
注意,区分 Cookie 时不考虑协议和端口。也就是说,`http://example.com`设置的 Cookie,可以被`https://example.com``http://example.com:8080`读取。
4052

4153
## Cookie 与 HTTP 协议
4254

@@ -197,7 +209,7 @@ Set-Cookie:id=a3fWa;
197209
</form>
198210
```
199211

200-
用户一旦被诱骗发送这个表单,银行网站就会收到带有正确 Cookie 的请求。为了防止这种攻击,表单一般都带有一个随机 token,告诉服务器这是真实请求
212+
用户一旦被诱骗发送这个表单,银行网站就会收到带有正确 Cookie 的请求。为了防止这种攻击,官网的表单一般都带有一个随机 token,官网服务器通过验证这个随机 token,确认是否为真实请求
201213

202214
```html
203215
<form action="your-bank.com/transfer" method="POST">
@@ -206,7 +218,7 @@ Set-Cookie:id=a3fWa;
206218
</form>
207219
```
208220

209-
这种第三方网站引导发出的 Cookie,就称为第三方 Cookie。它除了用于 CSRF 攻击,还可以用于用户追踪。比如,Facebook 在第三方网站插入一张看不见的图片。
221+
这种第三方网站引导而附带发送的 Cookie,就称为第三方 Cookie。它除了用于 CSRF 攻击,还可以用于用户追踪。比如,Facebook 在第三方网站插入一张看不见的图片。
210222

211223
```html
212224
<img src="facebook.com" style="visibility:hidden;">

docs/bom/same-origin.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,10 @@ var allCookie = document.cookie;
8989

9090
注意,这种方法只适用于 Cookie 和 iframe 窗口,LocalStorage 和 IndexedDB 无法通过这种方法,规避同源政策,而要使用下文介绍 PostMessage API。
9191

92-
另外,服务器也可以在设置 Cookie 的时候,指定 Cookie 的所属域名为一级域名,比如`.example.com`
92+
另外,服务器也可以在设置 Cookie 的时候,指定 Cookie 的所属域名为一级域名,比如`example.com`
9393

9494
```http
95-
Set-Cookie: key=value; domain=.example.com; path=/
95+
Set-Cookie: key=value; domain=example.com; path=/
9696
```
9797

9898
这样的话,二级域名和三级域名不用做任何设置,都可以读取这个 Cookie。

0 commit comments

Comments
 (0)