cookie详解

197 阅读2分钟

Cookie 用于存储 web 页面的用户信息。在发起Http请求时会将cookie信息放在Request Header中一同发送给服务器,服务器接受请求时可以拿到客户端本地存储的cookie信息

image.png

cookie包含的属性

image.png

  • Name
    • cookie信息的属性名
  • Value
    • cookie信息的属性值
  • Domain
    • 指定哪些主机可以接受Cookie,代表在指定的域名下访问才会携带信息
    • 例如domain设定为www.hayho.com,那么我在www.hayho.com下的请求就会发送对应的cookie
  • Path
    • 标识指定了主机下的哪些路径可以接受 Cookie
    • 例如path=/, 代表该域名下所有耳机域名都可以访问
    • 例如path=/docs,代表- *.com/docs,- *.com/docs/Web/都可以匹配,而*.com/docs2则不会匹配
  • Expires
    • 过期时间,时间超过当前设定时间则会删除此条cookie
  • Size
    • cookie大小
  • HttpOnly
    • 限制客户端访问和修改,只会随着请求发送
    • 只有服务端可以设置此属性
    • Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly
  • Secure
    • 标记为 Secure 的 Cookie 只应通过被 HTTPS 协议加密过的请求发送给服务端,因此可以预防 man-in-the-middle 攻击者的攻击
  • SameSite
    • None 浏览器会在同站请求、跨站请求下继续发送 cookies,不区分大小写
    • Strict 浏览器将只在访问相同站点时发送 cookie
    • Lax但用户从外部站点导航至URL时(例如通过链接)除外。 在新版本浏览器中,为默认选项,Same-site cookies 将会为一些跨站子请求保留,如图片加载或者 frames 的调用,但只有当用户从外部站点导航到URL时才会发送。如 link 链接
  • SameParty - 限制三方 Cookie 的访问
  • Priority
    • 优先级,chrome的提案,定义了三种优先级,Low/Medium/High,当cookie数量超出时,低优先级的cookie会被优先清除

cookie的使用

  • 读取cookie
    • document.cookie
  • 创建cookie
    • 客户端
      • document.cookie="username=John Doe";
      • 添加时间和路径 document.cookie="username=John Doe; expires=Thu, 18 Dec 2043 12:00:00 GMT; path=/";
    • 服务端
      • Set-Cookie方法
      • 可以设置HttpOnly
  • 修改cookie
    • document.cookie="username=John Smith; expires=Thu, 18 Dec 2043 12:00:00 GMT; path=/";
    • 旧的 cookie 将被覆盖
  • 删除cookie
    • 设置 expires 参数为以前的时间
    • document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT";

Session

  • Session存储在服务端,但是客户端Session默认是以cookie的形式来存储的
  • 用户每次提交页面,浏览器都会把这个SessionID包含在 HTTP头中提交给Web服务器