Cookie 详解

1. 首先,Cookie 是什么?

  简单来说,Cookie 是用来在客户端存储会话信息的,它要求服务器在响应给客户端信息时,携带一个头部字段 Set-Cookie,其内容为键值对——一些需要存储在客户端本地的信息。在之后的每一次请求中,浏览器会将这些信息,携带在请求头部字段 Cookie 中,发送给服务器,用以标识客户端的身份。

  比如一个简单的应用:将用户第一次登录的账号信息存储在 Cookie 中,下次用户访问这个网站时,请求携带了上一次访问网站登录的信息,则用户无需输入账号密码即可登录【存在安全隐患】。

  下面在其他博主那里转的图,附上链接:https://www.cnblogs.com/qcloud1001/p/10101067.html

第一次请求:

下一次请求:

2. Cookie 的属性:

【1】构成键值对的 名称 与 属性值:名称是用以唯一标识 Cookie 的,不区分大小写,值就是这个 Cookie 的内容. 

【2】Domain 域 、Path 路径:两者一起限制在请求哪些服务器时,会携带 Cookie 信息,即如果要访问的 URL 的域名是 Cookie Domain 的值或者是其子域,且 URL 的路径是 Cookie Path 的值或者其子路径,则代表会携带 Cookie 信息。

  比如:Cookie 设置的 Domain 为 "baidu.com",Path 为 "/",那么我们访问 "baidu.com/" 或者 子域 "m.baidu.com/" 或者子路径 "m.baidu.com/home",均可携带 Cookie.

【3】expires 过期时间:它限制了在何时 Cookie 信息会被清除,当这个值没有被指定时,默认过期时间是会话结束,即关闭浏览器。它的值必须是 GMT 格式的时间,如果把值设置为过去的时间,那么这个 Cookie 会被立即清除。注意的是:expires 是 http 1.0 协议的字段,在 http 1.1 协议中 expires 已被弃用,使用了 Max-Age 替代,expires 是到指定时间过期,而 Max-Age 是创建后过多少秒过期。

【4】secure 安全标志:当你给 Cookie 设置了 secure 时,只有使用 SSL 安全连接的情况下,才会把 Cookie 发送到服务器【即 http 不会发送 Cookie,只有 https 才会发送 Cookie】,默认情况不设置 secure,它是 Cookie 属性中唯一一个不是键值对形式,只需要写上 secure 即可生效。 

【5】Http-only:这种类型的 Cookie 可以在浏览器设置,也可以在服务器设置,但是只能在服务器读取,不能在浏览器读取.

3. 如何设置 Cookie?

   使用 document.cookie 可以获取 Cookie 信息,也可以设置 Cookie,不会覆盖原有 Cookie,除非重名. 不过此种方式比较不方便,可以自己封装一个辅助类去实现 getter、setter、remove 方法,见红宝书第四版 P753.

4. 子Cookie:

  我们知道 Cookie 是有限制的:

  【1】每个域不超过 20 个Cookie

  【2】每个 Cookie 不超过 4096 Byte,即 4KB

  如果我们希望跳出每个域 20 个 Cookie 的限制,可以使用子 Cookie,本质就是在一个 Cookie 内部存储多个键值对。

5. Cookie 的缺点:

【1】存在限制,每个域最多 20 个 Cookie,每个 Cookie 最多 4KB 内存。

【2】超出域限制 Cookie 个数后,之前的 Cookie 会被清除。

【3】每次都需要将 Cookie 发送到服务器,然而有些信息是不需要频繁发送的。

【4】需要自己手动封装 Cookie 的 getter、setter、remove、clear 方法。

6. 与 Storage 进行对比,在之后的随笔里讲......

posted @ 2021-10-02 14:13  TwinkleG  Views(591)  Comments(0)    收藏  举报