Cookie是计算机上存储在小文本文件中的数据。当Web服务器将网页发送到浏览器时,链接将关闭,服务器将忘记用户的全部内容。发明Cookie是为了解决“如何记住用户信息”的问题: 当用户访问网页时,他/她的名字能够存储在cookie中。 下次用户访问该页面时,cookie会“记住”他/她的名字。 Cookie以键值对形式保存,如:javascript
username = John Doe
复制代码
当浏览器从服务器请求网页时,属于该页面的cookie将添加到请求中。这样,服务器获取必要的数据以“记住”有关用户的信息。 若是您的浏览器已关闭本地Cookie支持,则如下示例均无效。html
JavaScript可使用document.cookie属性建立,读取和删除cookie。使用JavaScript,能够像这样建立一个cookie:java
document.cookie = "username=John Doe";
复制代码
您还能够添加到期日期(以UTC时间为单位)。默认状况下,在浏览器关闭时删除cookie:数组
document.cookie = "username=John Doe; expires=Thu, 18 Dec 2013 12:00:00 UTC";
复制代码
使用path参数,您能够告诉浏览器cookie属于哪一个路径。默认状况下,cookie属于当前页面。浏览器
document.cookie = "username=John Doe; expires=Thu, 18 Dec 2013 12:00:00 UTC; path=/";
复制代码
使用JavaScript,cookie能够像这样读取:bash
var x = document.cookie;
复制代码
document.cookie将返回一个字符串中的全部cookie,如:cookie1 = value; cookie2 =值; cookie3 =值;服务器
使用JavaScript,您能够像建立cookie同样更改cookie:cookie
document.cookie = "username=John Smith; expires=Thu, 18 Dec 2013 12:00:00 UTC; path=/";
复制代码
旧cookie被覆盖。函数
删除cookie很是简单。删除cookie时,没必要指定cookie值。只需将expires参数设置为传递日期:ui
document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
复制代码
您应该定义cookie路径以确保删除正确的cookie。若是您未指定路径,某些浏览器将不容许您删除cookie。
document.cookie属性看起来像普通的文本字符串。但事实并不是如此。即便你将一个完整的cookie字符串写入document.cookie,当你再次读出它时,你只能看到它的名称 - 值对。若是您设置了新cookie,则不会覆盖较旧的cookie。新的cookie被添加到document.cookie,因此若是你再次阅读document.cookie,你会获得相似的东西:cookie1 = value; cookie2 = value; 若是要查找一个指定cookie的值,则必须编写一个JavaScript函数来搜索cookie字符串中的cookie值。
在下面的示例中,咱们将建立一个存储访客姓名的cookie。访问者第一次到达网页时,将要求他/她填写他/她的姓名。而后将名称存储在cookie中。下次访问者到达同一页面时,他/她将收到欢迎信息。在这个例子中,咱们将建立3个JavaScript函数:
首先,咱们建立一个函数将访问者的名称存储在cookie变量中:
function setCookie(cname, cvalue, exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
var expires = "expires="+ d.toUTCString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}
复制代码
示例说明: 上述函数的参数是cookie的名称(cname),cookie的值(cvalue)以及cookie到期以前的天数(exdays)。该函数经过将cookiename,cookie值和expires字符串相加来设置cookie。 获取Cookie的功能 而后,咱们建立一个function返回指定cookie的值:
function getCookie(cname) {
var name = cname + "=";
var decodedCookie = decodeURIComponent(document.cookie);
var ca = decodedCookie.split(';');
for(var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
复制代码
功能说明: 将cookiename做为参数(cname)。使用要搜索的文本(cname +“=”)建立变量(名称)。解码cookie字符串,处理带有特殊字符的cookie,例如'$'将分号上的document.cookie拆分为名为ca的数组(ca = decodingCookie.split(';'))。循环经过ca数组(i = 0; i < ca.length; i ++),并读出每一个值c = ca [i])。若是找到cookie(c.indexOf(name)== 0),则返回cookie的值(c.substring(name.length,c.length))。若是找不到cookie,则返回“”。 检查Cookie的功能 最后,咱们建立一个函数来检查是否设置了cookie。若是设置了cookie,它将显示问候语。若是未设置cookie,它将显示一个提示框,询问用户的名称,并经过调用setCookie函数将用户名cookie存储365天:
function checkCookie() {
var username = getCookie("username");
if (username != "") {
alert("Welcome again " + username);
} else {
username = prompt("Please enter your name:", "");
if (username != "" && username != null) {
setCookie("username", username, 365);
}
}
}
复制代码
全部代码都在一块儿实现
function setCookie(cname, cvalue, exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
var expires = "expires="+d.toUTCString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
function checkCookie() {
var user = getCookie("username");
if (user != "") {
alert("Welcome again " + user);
} else {
user = prompt("Please enter your name:", "");
if (user != "" && user != null) {
setCookie("username", user, 365);
}
}
}
复制代码
上面的示例checkCookie()在页面加载时运行该函数。 更详情的Cookie技术文章