描述
每个 Cookie 都有以下几方面的元数据。
key=value;expires=Wed, 21 Oct 2015 07:28:00 GMT;max-age=23456523456;domain=.example.com;path=/
- Cookie 的名字
- Cookie 的值(真正的数据写在这里面)
- 到期时间(超过这个时间会失效)
- 所属域名(默认为当前域名)
- 生效的路径(默认为当前网址)
属性
Expires
- Expires指定一个具体的到期时间(UTC),到了指定时间以后,浏览器就不再保留这个 Cookie
- 如果不设置该属性,或者设为null,Cookie 只在当前会话(session)有效,浏览器窗口关闭,当前 Session 结束,该 Cookie 被删除
- 浏览器根据本地时间,决定 Cookie 是否过期,由于本地时间是不精确的,所以没有办法保证 Cookie 一定会在服务器指定的时间过期。
Domain
- 指定 Cookie 属于哪个域名
- 如果没有指定 Domain 属性,浏览器会默认将其设为浏览器的当前域名。如果当前域名是一个 IP 地址,则不得设置 Domain 属性。
- Domain 属性只能是当前域名或者当前域名的上级域名,不能设为顶级域名或公共域名
Path
- 指定浏览器发出 HTTP 请求时,哪些路径要附带这个 Cookie
Secure
- 指定浏览器只有在加密协议 HTTPS 下,才能将这个 Cookie 发送到服务器
- 如果当前协议是 HTTP,浏览器会自动忽略服务器发来的Secure属性。
HttpOnly
- 指定该 Cookie 无法通过 JavaScript 脚本拿到
SameSite
Max-Age
- 指定从现在开始 Cookie 存在的秒数
- 如果同时指定了Expires和Max-Age,那么Max-Age的值将优先生效
- 如果不设置该属性,或者设为null,Cookie 只在当前会话(session)有效,浏览器窗口关闭,当前 Session 结束,该 Cookie 被删除
特点
使用
document.cookie
- 它会返回当前网页的所有 Cookie,HTTPOnly属性除外。(只能获取到key和value,其他的属性获取不到)
- 写入 Cookie 的时候,必须对分号、逗号和空格进行转义
- 一次只能写入一个 Cookie,而且写入并不是覆盖,而是添加。
- 删除一个现存 Cookie 的唯一方法,是设置它的expires属性为一个过去的日期
注意
一般来说,单个域名设置的 Cookie 不应超过30个,每个 Cookie 的大小不能超过 4KB。超过限制以后,Cookie 将被忽略,不会被设置。
document.cookie读写行为的差异(一次可以读出全部 Cookie,但是只能写入一个 Cookie),与 HTTP 协议的 Cookie 通信格式有关。浏览器向服务器发送 Cookie 的时候,Cookie字段是使用一行将所有 Cookie 全部发送;服务器向浏览器设置 Cookie 的时候,Set-Cookie字段是一行设置一个 Cookie。
|