浅谈 Cookie

Cookie

由于 http 是无状态连接,有时候我们需要知道请求方的信息,而 Cookie 则是很好扮演了这个角色,它可以在请求头,随着请求一同被发送。我们可以在浏览器(以 Chrome 为例)中的检查/Application/Storage/Cookies里面可以看见当前网页的Cookie。

Cookie 浏览器相关字段如下:

  • Name:Cookie 的名称

  • Value:Cookie 的值

  • Domain:Cookie 的域

    域名只能为一个,不能有多个。但是域名分带点以及不带点,不带点,那么只能在当前域名下获取 Cookie;带点,那么可以在这个子域下获取 Cookie。例如,domain 为 A.study.com,那么只有A.study.com能获取到这个 Cookie;domain 为 .study.com,那么只有 A.study.com 以及B.study.com 都能获取到这个 Cookie。

  • Path:路径

    默认为/,你也可以设置为/login,那么/login可以获取到/login以及/下的 Cookie,而/只能获取到/下的 Cookie。

  • Expires/Max-age:Cookie的过期时间

    默认为一次会话,关闭浏览器一会后就消失,也可以自己设置。

  • Size:Cookie 的大小

  • HttpOnly:JS脚本是否可以获取(默认可以获取,为false)

    若设置为 true,JS 脚本将无法获取 Cookie,能有效的防止XSS攻击。

  • Secure:JS脚本是否可以获取(默认可以获取,为false)

    若为 true,那么 Cookie 只能在HTTPS连接中传输;若为 false,HTTP、HTTPS连接都行。

  • SameSite:限制第三方cookie

    有3个值:Strict/Lax/None。chrome51新增,chrome80+强制执行。

    1. Strict: 仅允许发送同站点请求的的cookie;
    2. Lax: 仅get请求跨站。
    3. None: 任意发送cookie,设置为None,需要同时设置Secure,意味着网站必须采用https,若同时支持http和https,可以将http用307跳转到https
  • priority:优先级

    优先级,chrome的提案,定义了三种优先级,Low/Medium/High,当cookie数量超出时,低优先级的cookie会被优先清除

Cookie 与 webStorage 的区别

谈到 Cookie 我们不免得会想到,localStorage 以及 sessionStorage 呢,那么它们有什么区别呢?

Cookie sessionStorage localStorage
有效期 默认会话(关闭浏览器后消失,也可设置时间) 会话(关闭浏览器一会后消失) 始终有效
作用域 同站(端口号和协议可以不同,后面会说明) 当前页面 同源
大小 4kb 左右(各浏览器不同) 5mb(各浏览器不同) 5mb(各浏览器不同)
兼容性 用户可禁用 ie8+ ie8+

有什么情况会必须使用 Cookie 呢?

Cookie的作用域十分巧妙,其为同站(域名相同就行),那么我们在实现单点登录的时候就可以使用 Cookie。现在我们有A.study.com、B.study.com 两个网站,我们可以设置登录 Cookie 的 domain为.Study.com,那么我们在两个网站都可以获取到登录的 Cookie。如果是跨域单点登录呢?这个时候我们需要借助第三方 Cookie(有兴趣可以百度一下,这里不做延展了)。

但是,目前浏览器都开始逐步禁用第三方 Cookie 了,具体信息可以查看下我的这一个帖子:cookie认证失败

Cookie 设置常见疑问

  • Cookie 同源下会进行覆盖,那么不同子域会覆盖吗?

    不会,不同子域下不会进行覆盖,即使有两个同名的 Cookie

  • domain 默认不带点吗?

    domain 默认不带点

你可能感兴趣的:(浅谈 Cookie)