本文作者: 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 指令
可使用:
ExpiresMax-AgeSecure仅面向 HTTPS 网站DomainPathSameSite
不可使用:
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) 进行许可。