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高级程序设计