Cookie

266 阅读2分钟

Cookie

1.是什么?

cookie是用于保存浏览器和服务端通信状态的一种存储机制,cookie存储在本地,由浏览器第一次请求时服务端返回,服务端使用set-Cookie进行设置。

浏览器与服务端通信过程: image.png

2.为什么?

由于http1.x协议的无状态,浏览器在与服务端通信时并不会保存状态,因此服务器对同一客户端发起的多次请求无法识别,因此建立了cookie和session机制用于保存通信状态。

3.怎么做?

cookie的字段

  • Expires(有效期):在这个时间点前cookie有效 不设置的话表示为会话cookie,当浏览器关闭时失效
  • Max-Age:存储有效时间,以秒为单位 为负数时表示会话cookie,为0时表示cookie会立即删除,为正数时表示持久性cookie,cookie会写入本地文件。 当与expires同时存在时max-age优先级更高。
  • domain:指定cookie送达的主机名
  • path:指定url路径,该路径下的资源才会携带cookie cookie共享:同一domain下的子域名cookie共享;同一path下的子目录cookie共享
  • HttpOnly:cookie仅能通过http请求获取,禁止了js直接通过document.cookie访问,有效地防止XSS攻击
  • Secure:仅能通过https协议发送给服务端。
  • SameSite:strict/lax/none 分别表示(1)禁止第三方请求携带cookie,(2)仅允许表单中的get方法和a标签中的get请求携带cookie,(3)默认携带cookie

SameSite 属性可以让 Cookie 在跨站请求时不会被发送,从而可以阻止跨站请求伪造攻击(CSRF)。

cookie的设置

  • 服务端设置 通过set-cookie设置,可以设置expires、max-age、domain、path、httpOnly、secure等属性

需要设置多个cookie时,添加多个set-cookie字段

  • 客户端设置 通过document.cookie写入,可以设置expires、domain、path、secure等属性,不能设置httpOnly。

需要设置多个cookie时,重复使用document.cookie设置

属性之间由一个分号和一个空格隔开。

document.cookie="key=name; expires=Thu, 25 Feb 2016 04:18:00 GMT; domain=ppsc.sankuai.com; path=/; secure; HttpOnly"

删除cookie:设置cookie的expires为过期时间,或者max-age为0