cookie 理解 前置知识点
域名 子域名
对于 example.com 这个域名而言,a.example.com 这样的域名就是它的子域名了。
cookie的属性
-
name : cookie的名称
-
value : cookie的值
-
domain: 域。决定cookie是在哪个域名生效的,就是浏览器向某个域名发送请求的时候,判断是否 携带对应的cookie。
-
path : cookie的有效路径。也是对子路径生效的。
-
maxAge: cookie的有效期,单位是秒,表示多少秒之后失效。0表示立即失效。为负数时,表示页面关闭时失效。
-
secure: 设置为true的时候,cookie只会在HTTPS和SSL等安全协议中传输此Cookie,不会在不安全的HTTP协议中传输Cookie。
-
HttpOnly: 值为true或false。设置成为false的时候,不允许通过脚本document.cookie去更改这个值,同样这个值在document.cookie中也不可见,但在发送请求时依旧会携带此Cookie。
cookie的唯一性是如何进行判断的?
domain + path + name 以这三者作为唯一性进行判断的。这里浏览器存储的时候,判断cookie的唯一性的方式。(目前自己的理解)
cookie的生命周期
产生
cookie 由服务端产生,返回给客户端。服务端会返回一个Set-Cookie的http头,里面存储着cookie的值。
销毁
cookie的销毁有两种情况,一种是cookie过期,另一种则是浏览器自己清除cookie。
客户端向服务端发起请求,服务端返回cookie响应,客户端再次发起请求,会携带cookie的过程解析
浏览器发起请求,会选择某个cookie进行传输,具体的选择规则逻辑
cookie的domain 限制了 哪些请求会使用这个cookie(向上级域名发起请求时,如果不存在上级域名对应的cookie,那么可以使用子域名对应的cookie),cookie的path 则是进一步判定,哪些cookie可以发送请求的路径。
cookie的存储
Cookie 的取值存储在哪里?
Cookie的值 存储在浏览器之中,被浏览器进行管理。
如何可视化查看浏览器所管理的Cookie?
在控制台查看Cookie的值。
cookie 消耗的资源
cookie 占据存储的空间。
cookie的限制
- cookie的大小是有限制的。不能超过4kb (不同的浏览器的限制不一样,但是要记住值的大小有限制)
问题
代码之中设置cookie的时候,设置了cookie的路径,但是chrome不加载,这是什么原因?
后台执行设置cookie的代码,所设置的cookie的path,一样要是接口的前缀路径。
例如 请求的接口路径是 /set/cookie,那么cookie之中的path可以设置为 / 也可以设置为 /set
也可以设置成为 /set/cookie
如果返回的cookie的path的 与请求的接口路径不符合的话,浏览器是不会存储这个cookie的。
浏览器 cookie的 expires/max-age 字段的值 是 session,表示的含义是什么?
如果cookie 不设置 expires值 以及 Max-Age的值,那么这个cookie会被认为是 session cookie,关闭浏览器这个cookie就会失效。
如果后端在设置调用 gin.SetCookie()方法的时候,domain设置为空字符串,那么cookie的domain的值会是什么?
写代码实验得知,并通过查看浏览器的控制台验证,domain的值为访问的域名。
实验
验证cookie的唯一性
实验步骤
建立两个接口,接口的作用就是设置名字为cook的cookie的值,并返回。 先调用接口1,然后调用接口2,在浏览器的客户端看下,最终存储的cookie的值是什么。
结论: 经过验证,cookie 的唯一性 是 domain + path + name 来决定的。
Cookie的小实验, 测试与域名的关系
实验步骤
1:实现一个Get请求的接口,接口的作用是 设置Cookie
2:实现另一个Get请求的接口,用来读取Cookie的信息,并打印在控制台上,
作为验证是否浏览器传入了Cookie
3:配置/etc/hosts 文件,为 127.0.0.1 配置不同的域名。
hosts文件之中的设置为
```
127.0.0.1 cookie.com
127.0.0.1 a.cookie.com
127.0.0.1 back.com
```
第一个域名 和第二个域名是父子关系,第一个,第二个域名和 第三个域名属于不同的域。
3:打开浏览器,查看Cookie的信息。