为什么没有用于cookie的内置JS函数

Why are there no builtin JS functions for cookies?

本文关键字:内置 JS 函数 cookie 用于 为什么      更新时间:2023-09-26

好吧,这个问题听起来可能很荒谬,但为什么没有通过JS修改cookie的实现呢。我之所以这么问,是因为在网络上,我看到了一些非常可怕的操作cookie的实现。

另外,为什么cookie不表示为Object?在我看来,如果cookie被表示为一个对象,那么操作它会容易得多。那么document.cookie可以只是对象的字符串表示。

document.cookie,即使听起来像是一个简单的属性,实际上也隐藏了函数访问(getter和setter)。

为什么cookie不是一个完整的结构化对象?我想原因是:

  • 与localStorage相同:强制只设置非常轻的数据,以避免饼干在磁盘上很重
  • 服务器、客户端和两者之间的标准用法(即传输)
  • 简单的规范化过程

回复评论:

  • 我不认为这是对的:我看到了一些原因
  • 我认为localStorage API是逻辑上的继任者,稍微好一点(仍然不完美)

document.cookie就是这样,因为它最初就是这样实现的。我知道,这是一个糟糕的原因,但你必须记住早期网络的历史。第一个实现新功能的浏览器为所有其他浏览器的复制设置了标准。

这与JavaScript中的null == undefined完全相同。旧的bug会成为必需的实现细节,我们将永远使用它,或者直到下周,这取决于谁在积极地研究w3规范。

为什么没有通过JS修改cookie的实现?

因为它不会向后兼容。显然,我们无法更改现有的实现,所以我们必须创建一个新的实现。在创建一个新的浏览器时,我们希望创建一个可以由现有JS代码合理复制的浏览器,以回填旧浏览器,但如果我们必须添加polyfill才能使其正常工作,为什么还要在浏览器中添加新功能呢?

所以,我们再也看不到比这更好的饼干了,对吧?

错误。浏览器正在添加一个新的对象实现来本地存储数据,它被称为localStorage,并且可以在需要的地方通过cookie合理地复制它。这也允许我们将本地信息与服务器信息分离(服务器可以为仅服务器的cookie设置仅在cookie上的HTTP)。