cookie

100 阅读4分钟

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的过程解析

image.png

浏览器发起请求,会选择某个cookie进行传输,具体的选择规则逻辑

cookie的domain 限制了 哪些请求会使用这个cookie(向上级域名发起请求时,如果不存在上级域名对应的cookie,那么可以使用子域名对应的cookie),cookie的path 则是进一步判定,哪些cookie可以发送请求的路径。

cookie的存储

Cookie 的取值存储在哪里?

Cookie的值 存储在浏览器之中,被浏览器进行管理。

如何可视化查看浏览器所管理的Cookie?

在控制台查看Cookie的值。 image.png

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,表示的含义是什么?

image.png

如果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的信息。