关于cookie和$.cookie

 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;
									    	}

  

原文地址:https://www.cnblogs.com/naniandongzhi/p/7953863.html