var d = new Date(); d.setDate(d.getDate()+day);//设置day天后清除缓存删除设置的时间;
简单的总结了一下cookie的使用,之前总是有迷惑的地方,感觉总结之后要清晰了许多
1. cookie
定义 : cookie是小量信息,由网络服务器发送出来以存储在网络浏览器上,从而下次这位独一无二的访客有回到该网络服务器时,可从该浏览器读回此信息。
使用原因:web程序是使用HTTP协议传输的,而HTTP协议是无状态的协议,对于事物处理没有记忆能力;缺少状态意味着如果后续处理需要前面的信息,则他必须重传,这样导致每次连接传送的数据量增加;cookie产生是为了弥补HTTP协议的不足;
终止条件:结束浏览器对话时候,即终止所有的cookie;
特点:(1)只能存储文本文件 (2)文本文件有大小限制4kb (3)数量限制50条 (4)读取有域名限制 不可跨越读取 (5)时效限制
使用时注意:
(1) document.cookie:当获取页面中的cookie值和名字符串类型;前页面存在,关闭后就没有了;document.cookie = "user = yanghuaizhi;pass = 123"
(2) 时效性:必须是日期对象;
var d = new Date(); d.setDate(d.getDate()+day);//设置day天后清除缓存删除设置的时间;
(3)cookie路径 :但凡路径不同视为两个cookie;
(4)存储cookie
function setCookie(name,path){ document.cookie = name +"="+ value+";path="+path+";expires="+d } setCookie("pass","123")
(5) 移除cookie
function removeCookie(name,path){ setCookie(name,null,-1,path) } removeCookie("pass","/");
(6)获取getCookie
function getCookie(name){ var sCookie = document.cookie;//获取当前页面的cookie; var aCookie = sCookie.split(";");//将获取的字符串转化为数组;[] for(var i = 0; i < aCookie.length; i ++){//遍历数组,转化为单个数组; var aCookieItem = aCookie[i].split("=");//将数组中的等号删除; if(aCookieItem[0] == name){//传入的参数等于名字; return aCookieItem[1]; } } return "";//如果没有获取到就返回空 } getCookie("pass");
(10).小案例 购物车;//需要用到拼接时候获取的json
var d = new Date(); d.setDate(d.getDate() + 7); var cookieKey = "product_" + res[i].id; var cookieValue = "{name:'res[i].name'}"; document.cookie = cookieKey + "=" + cookieValue; var arr = document.cookie.split(";"); for(var i = 0; i < arr.length; i ++){ var val = arr[i].split("=");//{name:'张三',price:'¥34.0',num:2};实际上有""; if(val[0].indexOf(cookieKey) == 0){ var p = eval("("+val[1]+")");//将字符串""删去; console.log(p.price); } }
2.$cookie
语法:$.cookie(名称,值,[option])
(1)读取cookie值
$.cookie(cookieName);
(2)写入设值
$.cookie(cookieName,cookieValue); $.cookie(cookieName,NULL);//销毁名为他的cookie;
(3)[option]参数说明
expires:有限日期;不设置的时候关闭浏览器的时候就消失了;
path:保存路径;默认和创建页路径一样;跨域二级域名有效要设值".xx.com"
secrue:默认为false,是否需要一个安全协议HTTP
(4)$.cookie("name",$(value).val(),{path:"/",expires:"7"});
注意点;cookie本质上是一个txt文本,只能够存入字符串,对象通常要序列化,而取得时候要反序列才得到对象;
(1)需要注意:同时存储多个数据的时候;在数组和字符串之间转换;
(2)数组=>修改数据
(3)字符串=》放进cookie之中
(4)没有cookie的情况下建立数据结构;有cookie的时候向结构中插入
(5)判断是否有cookie
if($.cookie("o") == null){ var o = {name:"zz",age :24}; var str = JSON.stringify(0);//序列化后成字符串存入cookie $.cookie("o",str,{expires:7}); alert("为空"); }else{ //存在读出来 var str1 = $.cookie("o"); var 01 = JSON.parse(str1);//字符串反序列化对象,输出对象的姓名值; alert(01.name); }
(6)存储cookie中可能出现的问题
报错 : google浏览器 提示:has no method $.cookie 火狐浏览器提示:$.cookie is not a function ;可能是同一个页面两次或者多次引入jquery插件
$.cookie小案例 购物车
//需要注意:同时存储多个数据的时候;在数组和字符串之间转换; //数组=>修改数据 //字符串=》放进cookie之中 //没有cookie的情况下建立数据结构;有cookie的时候向结构中插入; if(!$.cookie("goods")){ //不存在 $.cookie("goods",'[{"id":'+id+',"num":1}]'); }else{ //数据结构存储 var cookie = $.cookie("goods"); var cookieArr = JSON.parse(cookie); var same = false;//是否建立存储数据的模式 for(var i = 0; i < cookieArr.length;i ++){ if(cookieArr[i].id == id){ //数据结构中存在当前的商品 cookieArr[i].num++; same = true; break; } } if(same == false){ var obj = {//不相等存入 id : id, num : 1 }; cookieArr.push(obj); } cookie = JSON.stringify(cookieArr);//存进cookie $.cookie("goods",cookie); (2)获取数量 howMany(){ if($.cookie("goods")){ var acookie = JSON.parse($.cookie("goods")) } var res = 0; for(var i = 0; i < acookie.length;i++){ res += acookie[i].num; } return res; }