cookie详情解析

最近在项目遇到了一些cookie的坑, 所以整体的总结一下cookie

cookie和前端爱恨纠缠

1
在前端提到cookie,首先想到本地存储、最大4k、同源策略,然后呢???, cookie到底是什么呢?

接下来让我们一起去探究cookie

一 、 获取cookie

1
2
3
通过 document.cookie 我们可以获取到cookie的内容,那我们获取到的cookie内容是什么样的呢???

如图所示: 我们获取到的cookie是所有cookie的一个字符串结合

二 、 设置cookie

1
2
3
4
设置cookie也是通过 document.cookie 来完成

// 通过document.cookie设值时, 只能设置一个cookie的值
document.cookie='myname=laihuamin;path=/;domain=.baidu.com';

三、 在浏览器中查看cookie

四、 cookie的属性构成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
1. name (cookie的名称)

一个唯一确定cookie的名称,cookie的名字一般都是经过encodeURIComponent编码后在进行设置,这样避免产生问题

2. value (cookie的值)
存储在cookie中的字符串值,一般都是经过encodeURIComponent编码后在进行设置,这样避免产生问题

3. domain (cookie生效的域)
cookie也是遵循同源策略的, 所以cookie的作用范围,只能是当前设置cookie的域以及它的子域,如果设置cookie时没有设置域名,那个默认是设置cookie时的当前域名

4. path (cookie匹配域的路径)

path这个属性默认是'/',这个值匹配的是web的路由,举个例子:

比如: www.baidu.com/blog

就是匹配到 www.baidu.com/blog 或者 www.baidu.com/blogaa 或者 www.baidu.com/blogbb

5. cookie 有效期

session : 表示cookie由浏览器默认存储,当浏览器关闭的时候自动删除cookie

Expires: 表示一个未来的时间点,表示cookie到期的时间点

Max-Age: 以秒为单位, 表示cookie的有效时长, 因为失效的cookie会被浏览器自动清除, 所以当Max-Age为0时,就表示删除cookie

6. secure

这是设置cookie安全的属性,当这个属性设置为true时,此cookie只会在https和ssl等安全协议下传输

7. HttpOnly 值为boolean

HttpOnly属性只能由服务端设置, HttpOnly设置为true后,前端不能通过js获取和设置cookie, 能有效的防止xss攻击

cookie和服务端的缘分

一、服务端设置cookie

1
2
1. 服务端通过响应头上的Set-Cookie属性给客户端设置cookie, 如果要设置多个cookie,需要多写几个Set-Cookie

如图:

Powered By Valine
v1.5.2