cookieapi和封装上一篇比较了cookies、localstorage、sessionstroage的区别。里面提到cookies需要专门封装,其余两个有专门的get、set方法。主要是今天。看一下实际项目中对cookie的封装。先看cookies的属性方法。其实只有两种,一种是读的,一种是写的。1.读取allCookies=document.cookie我们可以通过document.cookie获取当前域名及其子域名下的所有cookie,它是一串以“;”(分号+空格)分隔的键值对。比如打开mdn网站的控制台,输入document.cookie,'_ga=GA1.2.1682758841.1619014911;首选语言环境=en-US;lux_uid=164510371039082338;_gid=GA1.2.750491686.1645103711'就会出现,当然不同的电脑是不一样的。.2.写document.cookie=newCookie这里值得注意的是,newCookie也是一个字符串,里面包含1+5个参数,分别是1,键名和键值组成的字符串,必须填写"${name}=${value}"值得注意的是,如果value结尾是分号或空格,会被删除。2.path;刚体验过才知道path=*path*path用来判断cookie是跟哪个请求一起出去的,假设你的浏览器当前有两个cookie:cookie1:name=name1;值=值1;path=/博悦/;cookie2:名称=名称2;值=值2;path=/boyue/同学/.访问http://localhost/boyue/*时,请求头中会包含cookie1,但不会包含cookie2。访问http://localhost/boyue/tongxue/*时,请求头中会包含以上两个。即访问子路径时包含其父路径的cookie,访问父路径时不包含子路径的cookie。仔细想想,这其实挺符合逻辑的,不然这个参数就没有意义了。3.域名;domain=*domain*设置域。有的同学可能会想,我有了路径为什么还要domain参数呢?主要是为了共享或区分不同域名下的一些参数。比如a.boyue.com和b.boyue.com是不同的域名,但是他们都可以获取boyue.com下的cookie,但是不能互相获取。记得带“.”否则只有域名完全一样才能获取到该参数。4.max-age;max-age=*max-age-in-seconds*这个很好理解,就是设置5之后过期的时间。;expires=date-in-GMTString-format来设置过期时间和日期,和上面差不多6.;secure表示cookie是否只能通过https协议传输。如果为true,即使js获取到对应的cookie,http请求也不能携带该参数。3、封装封装主要是修改其写法和获取方式,尤其是获取方式。毕竟我一般需要的是对应的值,而不是所有的键值对。我们简单实现一下constcookie={get:function(sKey){//根据存储规则(不同键值对用分号和空格区分,小属性用分号区分),先用“;”剪切,然后取出第一个等号和第一个分号的内容返回decodeURIComponent(document.cookie.replace(newRegExp("(?:(?:^|.*;)\\s*"+encodeURIComponent(sKey).replace(/[-.+*]/g,"\\$&")+"\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"))||无效的;},//写进去就大功告成,会直接覆盖原来的键值对集合:function(sKey,sValue,vEnd,sPath,sDomain,bSecure){if(!sKey||/^(?:expires|max\-age|path|domain|secure)$/i.test(sKey)){returnfalse;}varsExpires="";if(vEnd){switch(vEnd.constructor){案例编号:sExpires=vEnd===Infinity?";expires=Fri,31Dec999923:59:59GMT":";max-age="+vEnd;休息;case字符串:sExpires=";expires="+vEnd;休息;案例日期:sExpires=";expires="+vEnd.toUTCString();br弱;}}document.cookie=encodeURIComponent(sKey)+"="+encodeURIComponent(sValue)+sExpires+(sDomain?";domain="+sDomain:"")+(sPath?";path="+sPath:"")+(bSecure?";安全":"");返回真;},//设置对应的过期时间小于当前时间移除:function(sKey,sPath,sDomain){if(!sKey||!this.hasItem(sKey)){returnfalse;}document.cookie=encodeURIComponent(sKey)+"=;expires=Thu,01Jan197000:00:00GMT"+(sDomain?";domain="+sDomain:"")+(sPath?";path="+路径:"");返回真;}};
