美文网首页
cookie使用详解

cookie使用详解

作者: 小鱼旋子 | 来源:发表于2019-06-17 09:59 被阅读0次

cookie的特点:

  • 对于绑定好的域名,当向这个域名发起请求时,http头部都会包含 cookie 信息
  • 每个域的cookie的数量和占用的磁盘空间都是有限的
    (原因:cookie是存在客户端的,所以加入了这个限制,来确保cookie不会被恶意使用)

cookie的组成

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

  • cookie 名称:必须经过URL 编码处理用 encodeURLComponent()

  • domain 域 : 设定cookie对于哪个域是有效的 指定完后即所有向这个域发送的请求都会带上这个cookie信息

  • path 路径:指定了的路径,向服务器请求时都会带上该cookie

  • expires: cookie的失效日期 ,是GMT格式的日期
    注:默认浏览器会话结束时cookie删除;则可通过该字段设其过期日期;
           若设的失效日期是以前的时间,则cookie会被立即删除。
    【设置cookie的过期时间:设置Set-cookie里的expires ;
        设置cookie无效的小技巧:设置Set-cooike里的expires为过去的时间,即可让cookie失效】

  • secure: 安全标志,一旦加上这个,则 cookie 只能在 https 下传输
    【注:这是cookie中唯一一个不是key-value形式的,需要限制时直接加一个英文单词 secure】

当服务端将通过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:把 cookie 字符串 加入响应头的 Set-Cookie字段中
  • 读cookie:解析 http 请求头的 Cookie 中的键值对

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

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

网站性能优化方面谈 cookie

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

相关文章

网友评论

      本文标题:cookie使用详解

      本文链接:https://www.haomeiwen.com/subject/cjpofctx.html