Page 72 - JavaScript修炼之道
P. 72
62 第五部分 服务器端技术
任务 27 读取及写入 cookie
在客户端直接操作cookie有不少用处。cookie持久化可以免去用户每次页面刷新后做重复设
置,比如重设表单提交和地址重定向之后的分页大小和被激活的选项卡(在选项卡控件中),以
及恢复树形控件中的展开/折叠结点状态。
不管用什么方式设置这些cookie(根据作用域或是失效时间),我们能得到的cookie子系统的
唯一真正接口是“第0层的DOM”的document.cookie属性。这些属性在读的时候充当getter,
在写的时候充当setter/deleter。然而很不幸,它并没有进一步为每项单独的cookie设置提供简明的
接口。这样写起来感觉就像是在直接读写原始的HTTP头部!
于是,为了避免写起来如此乏味,大多数框架要么直接提供,要么通过某个著名的插件提供
了对cookie的更合适的访问方式。然而cookie管理不过是小事一件,没必要靠框架。即使你确
实已经在用框架(你也应该用框架),而且这个框架有cookie相关的功能,你也有可能不喜欢它
的API。
鉴于这些原因,我在下一页写了个可以单独使用的JavaScript cookie辅助模块。这个模块不依
赖于任何框架,试图提供一组便捷的API(尤其在参数方面)。它经过充分的测试而且有丰富的文
档说明,也许你会想试一试。
最后,你应该记住关于cookie的几个事实。
它们位于客户端,因此处于相当暴露的环境中。绝不要在那里放一些敏感信息,除非你
给它们加了密,并做了坚固的防篡改处理。
它们的容量非常有限(4KB),不应该用来存储大量数据(比如历史记录、复杂的购物车
内容、文本初稿等)。
它们可能会不可用,不过这种现象很少见。稍微常见一点的问题是,由于浏览器的安全策
略(可能是因为公司的保密措施,也可能是用户出于隐私考虑而以那种方式配置了浏览
器),设置了失效期的cookie在不同session之间丢失了。
考虑到这些情况,请尽量把cookie(尤其是那些持续时间长的cookie)作为Web程序的附加
功能来使用。