3

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

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

4

2 回答 2

1

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

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

  • 与 localStorage 相同:强制您只设置非常轻的数据,以免 cookie 在磁盘上变得很重
  • 服务器、客户端和中间(即传输)上的标准用法
  • 简单的标准化过程...

回答评论:

  • 我没有说这是对的:我看到了一些原因
  • 我想 localStorage API 是逻辑上的继承者,稍微好一点(仍然不完美)
于 2012-08-23T17:44:23.827 回答
1

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

null == undefined这与JavaScript 中的原因完全相同。旧的错误成为必需的实现细节,我们将永远坚持下去,或者直到下周,这取决于谁在积极致力于 w3 规范。

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

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

所以,我们永远不会看到更好的饼干,对吧?

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

于 2012-08-23T17:50:34.610 回答