设置Cookie
使用document.cookie与Server端 set-cookie字段区别:
字段名称 | document.cookie | set-cookie | 备注 |
---|---|---|---|
expires | √ | √ | document.cookie只支持 Data.toUTCString() 形式 |
max-age | √ | √ | max-age优先级比 expires高 |
domain | √ | √ | |
path | √ | √ | |
secure | √ | √ | |
httpOnly | √ | ||
SameSite | √ | 不随跨域请求发送,防止csrf |
设置cookie方式:
- docuemnt.cookie:
document.cookie="token=xxxx"
document.cookie="a=xx"
- set-cookie:
Set-cookie: token=xxxx
Set-cookie: a=xx
删除一个cookie
cookie应该使用 Domain + Name + Path来唯一标识的。cookie本身只是一个字符集合,并没有提供删除的api,如果想要删除,可以巧用过期时间。例如删除当前域名下的 path为/ 同时Name为 a的cookie:
document.cookie = 'a=1;expires=Thu, 01 Jan 1970 00:00:00 GMT' // 时间需要时 Date().toUTCString()格式,通用的1970-01-01不识别
同理如果需要删除path为其他域名的,需要指定path
document.cookie="a=2;path=/qr;expires=Thu, 01 Jan 1970 00:00:00 GMT" // 指定path为 /qr
在最新的chrome下面使用 max-age也是可以删除的
document.cookie='a=1;max-age=-1'
如果删除不了,请设置domain
!!!
浏览器对Cookie的限制
基于chrome的测试
每一个cookie的大小4KB,此处现在应该是document.cookie值的总长度限制;
如果一个cookie超过4kb执行不报错,但是会设置不成功
同理对于 set-cookie也是一样大道理
基于Firefox的测试
每一个cookie的大小为4KB,但是不会包含 =
和选项的大小
具体可以通过 http://browsercookielimits.squawky.net/ 进行测试
网友评论