十二、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 中检索它们。
版权属于:月萌API www.moonapi.com,转载请注明出处