Cookie 用于存储 web 页面的用户信息。在发起Http请求时会将cookie信息放在Request Header中一同发送给服务器,服务器接受请求时可以拿到客户端本地存储的cookie信息
cookie包含的属性
- 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浏览器将只在访问相同站点时发送 cookieLax但用户从外部站点导航至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服务器