本文作者: jsweibo
本文链接: https://jsweibo.github.io/2020/01/25/JavaScript%E4%B8%AD%E7%9A%84document-cookie/
摘要
本文主要讲述了:
- 作用
- 限制
正文
作用
作为Document.prototype
的getter
属性和setter
属性,被所有Document
的实例继承。用于读写部分第一方 cookie
示例:
1 | Object.getOwnPropertyDescriptor(Document.prototype, 'cookie'); |
写入 cookie
示例:
1 | document.cookie = 'a=1'; |
示例:有效期为 60 秒的 cookie
1 | document.cookie = 'b=2; Max-Age=60'; |
读取 cookie
示例:
输入:
1 | console.log(document.cookie); |
输出:
1 | a=1; b=2 |
限制
浏览器端的 JavaScript 仅能使用部分 cookie 指令
可使用:
Expires
Max-Age
Secure
仅面向 HTTPS 网站Domain
Path
SameSite
不可使用:
HttpOnly
浏览器端的 JavaScript 仅能读写部分第一方 cookie
由于”同源政策 + Public Suffix List”的限制,浏览器端的 JavaScript 仅能读写部分第一方 cookie。
注意:cookie 的读写并未完全遵循同源政策。例如:
- 允许
a.example.com
读写domain=.example.com
的 cookie - 允许
https://a.example.com
读写http://a.example.com
的 cookie,反之亦然 - 允许
http://a.example.com:81
读写http://a.example.com:80
的 cookie
示例:
特别注意:以 Chrome 浏览器中最终存储的 cookie 的domain
为准
允许
example.com
读写domain=.example.com
的 cookie(document.cookie = "jsweibo=123;domain=example.com";
)允许
example.com
读写domain=example.com
的 cookie(document.cookie = "jsweibo=123";
)禁止
example.com
读写domain=.a.example.com
的 cookie(document.cookie = "jsweibo=123;domain=a.example.com";
)禁止
example.com
读写domain=a.example.com
的 cookie(无法编写对应的 JavaScript 脚本)允许
a.example.com
读写domain=.example.com
的 cookie(document.cookie = "jsweibo=123;domain=example.com";
)禁止
a.example.com
读写domain=example.com
的 cookie(无法编写对应的 JavaScript 脚本)允许
a.example.com
读写domain=.a.example.com
的 cookie(document.cookie = "jsweibo=123;domain=a.example.com";
)允许
a.example.com
读写domain=a.example.com
的 cookie(document.cookie = "jsweibo=123";
)禁止
a.example.com
读写domain=.b.example.com
的 cookie(document.cookie = "jsweibo=123;domain=b.example.com";
)禁止
a.example.com
读写domain=b.example.com
的 cookie(无法编写对应的 JavaScript 脚本)
参考资料
本文作者: jsweibo
本文链接: https://jsweibo.github.io/2020/01/25/JavaScript%E4%B8%AD%E7%9A%84document-cookie/
本文对你有帮助?请支持我
- 本文链接: https://jsweibo.github.io/2020/01/25/JavaScript%E4%B8%AD%E7%9A%84document-cookie/
- 版权声明: 除非另有说明,否则本网站上的内容根据署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。