转载自: 脚本之家
cookie是document对象的属性, 可以用js操作它. cookie是一个文件,对应一个域名. 同一个域名下的网页都可以使用同一个cookie.
缺点
cookie的缺点主要集中于安全性和隐私保护。主要包括以下几种:
- 浏览器能够禁用cookie功能;
- cookie是与浏览器相关的, 不能跨浏览器互相访问.
- cookie可能被安全软件或用户删除。
- cookie安全性不够高。所有的cookie都是以纯文本的形式记录于文件中,因此如果要保存用户名密码等信息时,最好事先经过加密处理。
操作
- 设置cookie
下面的都是单会话cookie,即浏览器关闭后这些cookie将会丢失,事实上这些cookie仅仅是存储在内存中,而没有建立相应的硬盘文件。
document.cookie="userId=28;name=liming"
//中文时需要url编码
document.cookie="str="+escape("I love ajax");
//解码
unescape();
document.cookie="name=liming";
document.cookie="age=17";
//他将会维护2个cookie
//重新赋值
document.cookie="name=xuwei"
- 获取cookie
document.cookie="userId=828";
document.cookie="userName=hulk";
var strCookie=document.cookie;
alert(strCookie);
他会弹出所有的cookie值字符串,并不能获取指定的键值对
切割方法
//这样就得到了单个cookie的值。
var strCookie=document.cookie;
//将多cookie切割为多个名/值对
var arrCookie=strCookie.split("; ");
var userId;
//遍历cookie数组,处理每个cookie对
for(var i=0;i<arrCookie.length;i++){
var arr=arrCookie[i].split("=");
//找到名称为userId的cookie,并返回它的值
if("userId"==arr[0]){
userId=arr[1];
break;
}
}
alert(userId);
- 给cookie设置终止日期
在实际开发中,cookie常常需要长期保存,例如保存用户登录的状态。这可以用下面的选项来实现:
var date=new Date();
var expiresDays=10;
date.setTime(date.getTime()+expiresDays*24*3600*1000);
//将userId和userName两个cookie设置为10天后过期
document.cookie="userId=828; userName=hulk; expires="+date.toGMTString();
- 删除cookie
为了删除一个cookie,可以将其过期时间设定为一个过去的时间
var date=new Date();
date.setTime(date.getTime()-10000);
//将userId这个cookie删除
document.cookie="userId=828; expires="+date.toGMTString();
- 指定可访问cookie的路径
//当前cookie仅能在shop目录下使用
document.cookie="userId=320; path=/shop";
//如果要使cookie在整个网站下可用
document.cookie="userId=320; path=/";
封装的通用方法
添加一个cookie
该函数接收3个参数:cookie名称,cookie值,以及在多少小时后过期。这里约定expiresHours为0时不设定过期时间,即当浏览器关闭时cookie自动消失。该函数实现如下:
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;
}
获取指定名称的cookie值
该函数返回名称为name的cookie值,如果不存在则返回空,其实现如下:
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 "";
}
删除指定名称的cookie:deleteCookie(name)
该函数可以删除指定名称的cookie,其实现如下:
function deleteCookie(name){
var date=new Date();
date.setTime(date.getTime()-10000);
document.cookie=name+"=v; expires="+date.toGMTString();
}