cookie使用详解

2019-06-17  本文已影响0人  小鱼旋子

cookie的特点:

cookie的组成

cookie是由服务端添加在响应头 Set-cookie 里,它包括几块信息,这些信息以 分号和空格分隔开。

当服务端将通过Set-cookie 将cookie发送给浏览器后,浏览器会进行保存, 等下次向cookie里设定的域进行请求时,都会在 http 头带上相关的 cookie 信息
但是注意: 浏览器向服务端发送cookie时: 只有名称和值才会被发送

cookie的使用

浏览器端

通过document.cookie这个接口,但是它在不用的方式下有不同的行为。

  1. 当用来获取属性时: document.cookie 返回的是当前页面所有的 cookie 字符串,是一系列由分号隔开的 ;
    注:名称和值都是经过URL 编码的,得用 decodeURLComponent() 来解码
  1. 设置值时:document.cookie 可用来设置一个新的 cookie 字符串,它会加入到已经有的cookie的集合中,并不会覆盖 cookie,除非cookie的名称已经存在

例如:

document.cookie = encodeURLComponent("name") + "=" + encodeURL("fishCrush")
// 设置了名称为name,值为fishCrush的cookie字符串

注:由于cookie在浏览器只有一个接口documen.cookie,不方便读取和设置,所以经常会封装 读取cookie和 设置cookie 的函数

服务器端

额外:服务端对 cookie的 进一步设置以确保其安全性

  1. signed
    当设 signed 为true 时,服务端会设两个 Set-cookie字段:
    一个是正常下的,
    附加的另一个是 名称以 .sig 为后缀值被加密的cookie,用来验证cookie在传输过程有无被篡改
  2. httpOnly
    加入这个字段后,禁止用 JS 操纵这个 cookie字段
    好处:当遇到XSS 攻击时,黑客没法拿到设置了 httpOnly 的 cookie的信息

网站性能优化方面谈 cookie

传输过程 cookie 是在请求头里的, 会占用一定的带宽
对于同站内的静态资源,这时候不需要 cookie,但是由于浏览器每次同域请求时都会在http头带上cookie,无形中就浪费了带宽
解决:
可以将静态资源 放到独立的域名中,以此来避免无用cookie的浪费

上一篇 下一篇

猜你喜欢

热点阅读