作者:kuqu00 | 来源:互联网 | 2023-07-28 16:56
十二、COOKIE
COOKIE 是从网站发送并存储在用户本地计算机上的一段数据。它们提供了一个持久的存储空间,允许网站在用户在页面之间移动或返回网站时记住他们。
创建 COOKIEs
COOKIEs 是通过给document.COOKIE
对象分配一个名称-值对来创建的。它们仅限于存储字符串值。
document.COOKIE = "COOKIE1=myCOOKIE";
相同的对象用于检索 COOKIE 字符串。
console.log(document.COOKIE); // "COOKIE1=myCOOKIE"
要修改一个 COOKIE,你只需要给它分配一个新值。这将覆盖以前的 COOKIE。
document.COOKIE = "COOKIE1=first";
当另一个名称-值对被分配给COOKIE
对象时,另一个 COOKIE 被自动创建。
document.COOKIE = "COOKIE2=second";
引用COOKIE
对象检索一个字符串,该字符串包含所有 COOKIEs 的分号分隔列表。
console.log("document.COOKIE"); // "COOKIE1=first;COOKIE2=second"
通过使用 string 对象的split
方法,可以从 COOKIE 字符串中提取每个名称-值对。方法返回包含拆分值的数组,这些值根据作为参数指定的分隔符进行拆分。
var dataList = document.COOKIE.split(";");
console.log(dataList[0]); // "COOKIE1=first"
console.log(dataList[1]); // "COOKIE2=second"
再次使用split
可以将名称与值分开。
var pair = dataList[0].split("=");
console.log(pair[0] + " is " + pair[1]); // "COOKIE1 is first"
编码
COOKIE 的名称-值对不能包含空格、逗号或分号。为了确保不包含这些字符,可以使用全局escape
方法对字符串进行 URL 编码。
document.COOKIE = "COOKIE1=" + escape("Foo Bar");
在 URL 编码格式中,空格被替换为%20。
console.log(document.COOKIE); // "COOKIE1=Foo%20Bar"
当读回 COOKIE 字符串时,unescape
方法用于撤销编码。
console.log(unescape(document.COOKIE)); // "COOKIE1=Foo Bar"
到期日期
除了名称-值对之外,COOKIE 字符串还可以包含其他信息,比如 COOKIE 应该何时过期。默认情况下,COOKIE 的生命周期限于当前浏览器会话。当用户关闭窗口时,该会话结束,之后浏览器删除 COOKIE。使用内置的Date
对象及其toGMTString
方法,以下面的方式设置到期日期。通过将这个毫秒数加到由getTime
方法返回的值上,这个 COOKIE 被设置为一小时后过期。
var myCOOKIE = "COOKIE1=first";
var date = new Date();
date.setTime(date.getTime() + (60*60*1000));
document.COOKIE = myCOOKIE + ";expires=" + date.toGMTString();
这个截止日期也提供了删除 COOKIEs 的方法。这是通过使用旧的到期日期重新创建同一个 COOKIE 来实现的,在本例中,到期日期是过去的一天。
var name = "COOKIE1";
var date = new Date();
date.setDate(date.getDate() - 1);
document.COOKIE = name + '=;expires=' + date.toGMTString();
请注意,只需要 COOKIE 的名称来标识要覆盖哪个 COOKIE。因此,值部分为空。
路径和域
为了访问 COOKIE,文档必须位于相同的域中,并且具有由 COOKIE 指定的相同路径。默认情况下,该路径是包含创建 COOKIE 的文档的文件夹的位置。以下示例说明了如何使 COOKIE 对给定域中的所有路径可见。
var myCOOKIE = "COOKIE1=first";
var path = "path=/";
document.COOKIE = myCOOKIE + ";" + path;
域默认为文档所在位置的主机部分,比如www.example.com
。为了使 COOKIE 对该域的其他子域可用,可以省略www
部分,如下例所示。
var domain = "domain=.example.com";
document.COOKIE = myCOOKIE + ";" + domain + ";" + path;
域、路径和过期选项可以按任意顺序出现。请记住,一旦设置了这些可选参数,就不可能从 COOKIE 中检索它们。