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程序的附加
             功能来使用。
   67   68   69   70   71   72   73   74   75   76   77