虽然在现代Web开发中讨论cookies似乎不合时宜,但它们是当今开发人员可用的最古老、最稳定的客户端存储形式。当然,我们不建议使用cookie,只是它是一个选项。Cookie于1994年在Netscape浏览器的测试版中引入。它通过随HTTP请求和响应发送的HTTP标头值工作。众所周知,每当浏览器请求资源时,都会随请求发送一组标头。这些标头包含各种类型的数据,其中包括有关浏览器的信息及其所需的数据形式。反过来,服务器发回标头。Cookies是使用HTTP头发送的,具体的HTTP头称为Cookies,从浏览器发送到服务器,再从服务器发送到浏览器。你会发现这里有问题。如果使用客户端存储的好处之一不是通过网络发送数据,那么来回发送cookie不是相反吗?这是如上所述不推荐cookie的另一个原因。默认情况下,浏览器可以拥有的cookie数量没有限制。以前,每个域有20个cookie的限制,但现代浏览器似乎已经取消了这个限制。Cookie对应唯一的域名。这意味着在foo.com上设置的cookie值不能用于goo.com。这很好,因为您不希望其他网站影响您在自己网站上使用cookie。Cookie还可以对应于唯一的子域。例如,app.foo.com是Foo网站的一个独立子域。您可以创建只有app.foo.com可以读取的cookie,或者您可以创建www.foo.com和app.foo.com都可以读取的cookie。一种更复杂的方法是创建仅对特定路径有效的cookie。因此,您可能希望创建仅对foo.com/app可见的cookie。最后,您可以创建仅对网站的安全(HTTPS)版本有效的cookie。显然,选择哪种解决方案取决于应用程序的目的以及您认为需要cookie值的位置。除了设置cookie出现的位置,您还可以指定cookie的有效时间。仅在当前会话期间存在的Cookie(基本上直到浏览器关闭)永久存在的Cookie要使用cookie,只需访问代码中的document.cookie对象即可。例如,一个Cookie.document.cookie="name=zuckjet"可以创建如下。cookie值必须符合URL编码规则,这意味着如果你想动态定义cookie,你需要使用像encodeURIComponent这样的辅助函数。下面的代码仍然创建两个cookie而不是一个。document.cookie="name=zuckberg";document.cookie="age=18";在cookie值后面使用分号附加元数据:document.cookie="name=zuckjet;expires=xxx;domain=xxx"当我们不指定元数据时,cookie只对当前域名的当前路径有效默认,有效期为当前会话。阅读Cookies阅读Cookies稍微容易一些——这取决于您解析字符串的程度。没有可用于获取cookie的API。但是,您可以简单地读取document.cookie。通过这种方式,您可以获取特定网站的cookie。比如segmentfault的cookie值是这样的:读取一个cookie就是把字符串解析成多个部分,用分号隔开。另请注意,您无权访问任何元数据。此类信息无法通过document.cookie值获取。删除Cookie要删除cookie,只需将其过期时间设置为过去即可。从技术上讲,时间值无关紧要,但名称必须与您要删除的cookie的名称相匹配。
