最近遇到了跨域统一认证的一些问题,其中对cookie的操作比较多,而有些属性都忘记了,所以记录一下。(当然,统一认证首推oAuth2.0)
name
- 该条cookie的key值,如果相同域名(或ip)下设置了相同的名称,则会覆盖
- 当在不同级别的域名下(二级域名、三级域名)设置了相同的名称,则会保留,这个时候发起的请求会携带多条改名称的信息
value
- 该条cookie的值
- 如果在httpOnly:true中设置过,则脚本不能设置该域下相同名称cookie
- 如果在secure:true中设置过,但当前浏览器域名不是https,则不能设置
expires
- 如果不传,cookie会调整为回话cookie,会一直保留到浏览器关闭(存放内存中)
- 如果传入Date为当前时间前,则会删除,如果在之后,则会保留到Date时间点再删除(存放硬盘中)
- 如果即设置了会话cookie,又设置了普通cookie,则会以后设置的为准
max-age
- 同expires,但参数是数值,且优先级比expires高
- 0:立即删除该cookie
- 负数:该cookie是会话cookie
- 正数:单位秒,在该时间后删除该cookie
domain
- cookie生效的域名
- 可以设置到父域名上,则父域名的子域名都可以获取到
path
- cookie生效的资源路径(上下文)
- 默认是/,如果你多个项目使用同一个域名,仅用上下文区分,但不想cookie相互污染影响带宽,就可以使用该属性
httpOnly
- 类型boolean
- 如果为true,禁止js访问该cookie,只会在浏览器层面传输
secure
- 类型boolean
- 如果为true,则该cookie只会在https中传输
sameSite
推荐阅读:阮一峰老师的Cookie 的 SameSite 属性
用于防御CSRF攻击
- 值:'Strict'|'Lax'|'None'
- None:谷歌浏览器中只有在secure为true才能设置,允许所有请求携带该cookie。比如允许a网址的form(post)提交到b网址时,或img(get)使用b网址的资源,携带b网址的该cookie
- Lax:默认值,只允许第三方get请求携带该cookie。比如从a网站打开b网址的页面,b请求html等资源时会携带cookie
- Strict:任何情况都不允许第三方携带cookie
sameParty
- 类型boolean
- 允许第三方cookie的协同示例
partition key
- cookie的分区
- 具体文档请看
priority
- 值:'Low'|'Medium'|'High'
- 默认值Medium,当cookie存储数量或大小超过浏览器指定阈值时,会删除优先级低的
- 目前在仅谷歌浏览器中实现了
以下是浏览器删除cookie的策略
- 从过期的 Cookie 中
- 从 Cookie 数超出预定义数量的域名中删除优先级为 Low 的 Cookie,并保留其最小保留值
- 从 Cookie 数超出预定义数量的域名中删除优先级为 Low 和 Medium 的 Cookie,同时需要保留优先级为 Low 以及优先级为 Medium 的 Cookie 至少保留量之和的 Low 与 Medium 的 Cookie
- 从 Cookie 超出预定义数量的域名中
- 从所有 Cookie 中