- cookie的缺点
- cookie的构成
- JavaScript实现cookie
cookie的缺点
1)每个域的cookie总数是有限的
IE6及其更低的版本,每个域名最多20个cookie;
IE7,每个域名最多50个cookie;
Firefox,每个域名最多50个cookie;
Opera,每个域名最多30个cookie;
Safari和Chrome对cookie的数量限制没有硬性规定。
当超过每个域名的cookie数量限制,但是还想在设置cookie时,浏览器会清除以前设置的cookie
2)浏览器会限制cookie的尺寸,最好将整个cookie的长度限制在4095B以内
cookie的构成
名称:一个唯一确定cookie的名称;
值:存cookie中的字符串值;
失效时间:一个GMT格式的时间,表示cookie何时应该被删除
路径:这个路径应该向服务器发送cookie
域:cookie对于哪个域是有效的
安全标志:cookie只有在采用加密的HTTPS协议建立通信连接时,才会发送到服务器。
JavaScript实现cookie
在读取cookie是,document.cookie返回当前页面可用的所有cookie的字符串(所有名字和值经过encodeURIComponent()编码,相应的也要采取decodeURIComponent()),用分号隔开;
在设置cookie时,name=value; expires=time; path=_path
l诸如上述的格式,中间用分号和空格隔开,末尾不加分号
采用JavaScript实现cookie的读取、写入和删除的操作如下:
var cookieUtil={
get:function(name){
var cookiename=encodeURIComponent(name)+"=";
var cookiestart=document.cookie.indexOf(cookiename);
var cookievalue=null;
//如果找到了cookiename
if(cookiestart>-1){
var cookieend=document.cookie.indexOf(";",cookiestart);
if(cookieend==-1){
var cookieend=document.cookie.length;
}
cookievalue=decodeURIComponent(document.cookie.substring(cookiestart+cookiename.length,cookieend));
}
return cookievalue;
}
//cookie的写入
set:function(name,value,expires,path,domain,secure){
//首先name与value是必须的
var cookietext=encodeURIComponent(name)+"="+encodeURIComponent(value);
if(expires instanceof Date){
cookietext+="; expires="+expires.toGMTString();
}
if(path){
cookietext+="; path="+path;
}
if(domain){
cookietext+="; domain="+domain;
}
if(srcure){
cookietext+="; secure";
}
return cookietext;
}
//cookie的删除操作(利用相同的域名,路径,安全选项重新设置cookie,并且将失效的时间设置为过去的时间
unset:function(name,expires,path,domain,secure){
this.set(name,"",new Date(0),path,domain,secure);
}
}
基本思路:
读取方法:先查找document.cookie字符串中是否能找到经过URL编码后的待读取cookie名的位置;
如果找到,根据该cookie名之后是否能找到分号确定出该cookie的结束的位置;
进行解码,返回cookie对应的值;
写入方法:
首先:name和value是必须的,且应该经过URL编码;
然后:按照分号,空格,名值对的形式将该cookie追加到字符串后
删除方法:
利用相同的域名,路径,安全选项重新设置cookie,并且将失效的时间设置为过去的时间
JavaScript高级程序设计