- cookie是啥?
cookie是浏览器的一种机制,它将document的cookie属性提供给javaScript,可以由javaScript来进行来控制, 但并不是javaScript的性质。cookie是存于用户硬盘的一个文件,这个文件对应一个域名。每次浏览器访问这个域名的时候都会使用这个文件,因此cookie是不可以跨域的,且cookie,则可以达到真正全局变量的要求。 - cookie的应用场合
(1) 保存用户的登录状态。比如将用户id存储在cookie中,当该用户再次访问该页面的时候,就不需要重新登录。而且还可以设置cookie的过期时间
(2) 跟踪用户的行为。比如,一个天气的预报网站,可以将每次的定位存储起来,然后下次访问网站的时候,就可以自动切换城市。不需要频繁的切换。
以上是列举的几个应用场合,还有许多地方可用。 - cookie的缺点(其缺点主要集中于安全性和隐私保护)
(1) cookie可能被用户禁用
(2) cookie可能被用户删除
(3) cookie是与浏览器相关的,浏览器之间的cookie是不可以互相访问的
(4) cookie的安全性不高,它是以一个文件的形式存在。因此,在使用cookie保存用户密码的时候需要进行加密保存 - cookie的使用
(1) 每一个cookie都是一个键值对(名/值)(key/value),使用的时候可以对document.cookie直接赋值
document.cookie = "userId=828;userNmae=jack";
cookie中的名或者值都不可以包含( ‘=’ 等号, ‘;’冒号 ,‘,’逗号以及空格等),如果不确定他是否包含以上字符,使用 escape()函数进行编码,它保存时一些特殊的字符是使用十六进制。
document.cookie = "str=" + escape('I LOVE YOU');
取值时,再将值使用unescape()函数还原
(2) 直接使用document.cookie赋值,并不会覆盖原来的值。相当于在原来的基础上添加一个cookie值
(3) 获取cookie值时,不能指定一个名回去值。需要通过获取全部,再进行遍历
//设置两个cookie
document.cookie="userId=828";
document.cookie="userName=jack";
//获取全部
var userId = '',
cookieArr = document.cookie.split(';');
//遍历cookie数组
for(var i = 0 , len = cookieArr.length ; i < len ; i++){
var arr= cookieArr[i].split('=');
if('userId' == arr[0]){
userId = arr[1];
}
}
(4) 设置cookie过期时间
迄今为止,所有的cookie都是单会话,浏览器关闭之后就会丢失,而且cookie也不是存储在硬盘中,而是在内存中
document.cookie="userName=jack;expiress=GMT_string";
其中GMT_String是以GMT格式表示的时间字符串,这条语句就是将userId这个cookie设置为GMT_String表示的过期时间,超过这个时间,cookie将消失,不可访问。
(5) 删除一个cookie,可以将其时间设置成过去的时间
//为了控制cookie可以访问的目录,需要使用path参数设置cookie,语法如下:
document.cookie="name=value; path=cookieDir";
//其中cookieDir表示可访问cookie的目录。例如:
document.cookie="userId=320; path=/shop";
//就表示当前cookie仅能在shop目录下使用。
(6) 指定可访问cookie的主机名
和路径类似,主机名是指同一个域下的不同主机,例如:www.google.com和gmail.google.com就是两个不同的主机名。默认情况下,一个主机中创建的cookie在另一个主机下是不能被访问的,但可以通过domain参数来实现对其的控制,其语法格式为:
document.cookie="name=value; domain=cookieDomain";
//以google为例,要实现跨主机访问,可以写为:
document.cookie="name=value;domain=.google.com";
//这样,所有google.com下的主机都可以访问该cookie。
5.操作cookie的常用的几个自定义函数
(1)添加:addCookie(name , value , expiresHours) 如果不设置过期时间,则表示关闭浏览器之后,丢失。
function addCookie(name,value,expiresHours){
var cookieString=name+"="+escape(value);
//判断是否设置过期时间
if(expiresHours>0){
var date=new Date();
date.setTime(date.getTime+expiresHours*3600*1000);
cookieString=cookieString+";
expires="+date.toGMTString();
}
document.cookie=cookieString;
}
(2) 获取特定的cookie值:getCookie(cookieName)
function getCookie(name){
var strCookie=document.cookie;
var arrCookie=strCookie.split("; ");
for(var i=0;i<arrCookie.length;i++){
var arr=arrCookie[i].split("=");
if(arr[0]==name)return arr[1];
}
return "";
}
(3) 通过cookie的名去删除: deleteCookie(cookieName)
function deleteCookie(name){
var date=new Date();
date.setTime(date.getTime()-10000);
document.cookie=name+"=v; expires="+date.toGMTString();
}