JS中cookie的使用及缺点讲解

  

  

饼干意为“甜饼”,是由W3C组织提出,最早由网景社区发展的一种机制。目前饼干已经成为标准,所有的主流浏览器如IE,网景,Firefox、Opera等都支持饼干。

  

由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是饼干的工作原理。

  

饼干实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用反应向客户端浏览器颁发一个饼干。客户端浏览器会把饼干保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该饼干一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改饼干的内容。

  

  

在程序中,会话跟踪是很重要的事情。理论上,一个用户的所有请求操作都应该属于同一个会话,而另一个用户的所有请求操作则应该属于另一个会话,二者不能混淆。例如,用户一个在超市购买的任何商品都应该放在一个的购物车内,不论是用户一个什么时间购买的,这都是属于同一个会话的,不能放入用户B或用户C的购物车内,这不属于同一个会话。

  

而网络应用程序是使用HTTP协议传输数据的.北京协议是无状态的协议,一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。即用户一个购买了一件商品放入购物车内,当再次购买商品时服务器已经无法判断该购买行为是属于用户一个的会话还是用户B的会话了。要跟踪该会话,必须引入一种机制。

  

饼干就是这样的一种机制。它可以弥补HTTP协议无状态的不足。在会话中出现之前,基本上所有的网站都采用饼干来跟踪会话。

  

  

假设一页在面中要保存变量用户名的值(“杰克”)到cookie中,键值为名称,则相应的JS代码为:

        。=" name=" +用户名,      

在饼干的名或值中不能使用分号(,),逗号(,),等号(=)以及空格。在饼干的名中做到这点很容易,但要保存的值是不确定的。如何来存储这些值呢?方法是用逃避()函数进行编码,它能将一些特殊符号使用十六进制表示,例如空格将会编码为“20%”,从而可以存储于cookie值中,而且使用此种方案还可以避免中文乱码的出现。

        文档。饼干=" str=" +逃脱(“我爱ajax”);//? " str=我% 20爱% 20 ajax”;之前      

当使用escape()编码后,在取出值以后需要使用unescape()进行解码才能得到原来的cookie值,

  

  

假设cookie中存储的内容为:<代码>名称=杰克;密码=123

  

则在B页面中获取变量用户名的值的JS代码如下:

        var用户名=document.cookie.split (“;”) [0] .split ("=") [1];//JS操作饼干方法!//写饼干   函数setCookie(名称,值)   {   var天=30;   var exp=new日期();   exp.setTime (exp.getTime() +天* 24 * 60 * 60 * 1000);   文档。饼干=名称+ "=" +逃脱(值)+”;到期=" + exp.toGMTString ();   }      

        函数getCookie(名字)   {   var加勒比海盗,reg=new RegExp(”(^ |)”+名字+”=((^;)*);| $ ");   如果(arr=document.cookie.match (reg))   返回unescape (arr [2]);   其他的   返回null;   }   删除饼干   函数delCookie(名字)   {   var exp=new日期();   exp.setTime (exp.getTime () - 1);   var cval=getCookie(名称);   如果(cval !=null)   文档。饼干=名称+ "=" + cval +”;到期=" + exp.toGMTString ();   }//使用示例   setCookie(“名字”,“海登”);   alert (getCookie("名称"));//如果需要设定自定义过期时间//那么把上面的setCookie函数换成下面两个函数就好了;//程序代码   函数setCookie(名称、值、时间)   {   var strsec=getsec(时间);   var exp=new日期();   exp.setTime (exp.getTime () + strsec * 1);   文档。饼干=名称+ "=" +逃脱(值)+”;到期=" + exp.toGMTString ();   }   函数getsec (str)   {   警报(str);   str.length var str1=str.substring(1日)* 1;   var str2=str.substring (0,1);   如果(str2==皊”)   {   返回str1 * 1000;   }   else if (str2==癶”)   {   返回str1 * 60 * 60 * 1000;   }   else if (str2==癲”)   {   返回str1 * 24 * 60 * 60 * 1000;   }   }//这是有设定过期时间的使用示例://s20是代表20秒//h是指小时,如12小时则是:h22//d是天数,30天则:d30   setCookie(“名称”、“海登”,“s20”);

JS中cookie的使用及缺点讲解