JavaScript中的document.cookie


本文作者: jsweibo

本文链接: https://jsweibo.github.io/2020/01/25/JavaScript%E4%B8%AD%E7%9A%84document-cookie/

摘要

本文主要讲述了:

  1. 作用
  2. 限制

正文

作用

作为Document.prototypegetter属性和setter属性,被所有Document的实例继承。用于读写部分第一方 cookie

示例:

1
Object.getOwnPropertyDescriptor(Document.prototype, 'cookie');

示例:

1
document.cookie = 'a=1';

示例:有效期为 60 秒的 cookie

1
document.cookie = 'b=2; Max-Age=60';

示例:

输入:

1
console.log(document.cookie);

输出:

1
a=1; b=2

限制

可使用:

  • Expires
  • Max-Age
  • Secure 仅面向 HTTPS 网站
  • Domain
  • Path
  • SameSite

不可使用:

  • HttpOnly

由于”同源政策 + 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/


本文对你有帮助?请支持我


支付宝
微信