美文网首页
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