介绍了Cookie的概念及属性, 为了便于自己使用封装函数便于操作, 介绍一下函数及使用mycookie。
一、mycookie函数:
/**
* [mycookie js操作Cookie函数封装,便于使用]
* @param {String} ){ var mc [description]
* @return {[type]} [description]
mycookie.set('键名','键值','时间','域名','目录'); //设置Cookie
mycookie.get('键名'); //获取Cookie
mycookie.getAll(); //获取全部Cookie
mycookie.getByJson(); //获取JSON格式Cookie
mycookie.del('键名','域名','路径'); //删除单个Cookie
mycookie.delAll(); //删除所有Cookie
*/
var mycookie = (function mycookie(){
var mc = "mycookie";
var set = function(name,value,time,domain,path){
//存储
var str=name+"="+encodeURIComponent(value);
if(time){
time = (new Date().getTime()) + time
var date = new Date(time).toGMTString();
str+=";expires="+date;
}
str=domain?str+";domain="+domain : str;
str=path?str+';path='+path :str;
document.cookie=str;
};
var get = function(name){
//读取
if(document.cookie.length>0){
var start=document.cookie.indexOf(name+"=");
if(start>-1){
start+=name.length+1;
var end = document.cookie.indexOf(";",start);
if(end===-1){
end=document.cookie.length;
}
return decodeURIComponent(document.cookie.slice(start,end));
}
}
return "";
};
var getAll = function(){
//读取全部
return document.cookie;
}
var getByJson = function(){
//cookie中值不能直接为分号(;),document.cookie也不会返回有效期、域名和路径,所以可以使用分号(;)分隔cookie
//使用JSON.parse的时候,字符串形式的对象。名和值必须使用双引号包裹,如果使用单引号就会报错 比如 JSON.parse("{'a':'1'}")是错误的 应该为JSON.parse('"a":"1"');
var cookieArr=document.cookie.split(";");
var jsonStr='{';
for(var i=0;i<cookieArr.length;i++){
var cookie=cookieArr[i].split("=");
jsonStr+='"'+cookie[0].replace(/\s+/g,"")+'":"'+decodeURIComponent(cookie[1])+'",';
}
jsonStr=jsonStr.slice(0,-1);
jsonStr+='}';
return JSON.parse(jsonStr);
}
var del = function(name,domain,path){
var date = new Date("1970-01-01");
var str=name+"=null;expires="+date.toGMTString();
str=domain ? str+";domain="+domain : str;
str=path ? str+";path="+path : str;
document.cookie=str;
}
var delAll = function(){
var cookieJson=this.getCookiesByJson(),
str="",
date = new Date("1970-01-01");
for(var i in cookieJson){
str=i+"=null;expires="+date.toGMTString();
}
document.cookie=str;
}
return {
set : set,
get : get,
getAll : getAll,
getByJson : getByJson,
del : del,
delAll : delAll
};
})(jQuery);
二、一级域名相同,二级域名下设置Cookie共享 Cookie共享和html页面本身的domain和path有关系,我们可以通过设置到一级根目录下共享: 二级域名:www.example.com 一级域名:example.com 根目录:/
$(function(){
// 1、使用默认domain和path --正常,仅当前域名可用--
mycookie.set("Key1","Value1");
// 2、使用主域名设置cookie,使用默认path。 --正常,同一主域名下都可使用--
mycookie.set("Key2","Value2","","example.com");
// 3、使用和主域名相同的cookie,但path路径不存在 --不能创建cookie;并且其后关于cookie的操作都会被禁止--
mycookie.set("Key3","Value3","","example.com","/ceshi");
// 4、使用外来域名相同的cookie --不能设置cookie--
mycookie.set("Key4","Value4","","ceshi.com");
// 5、使用当前网站域名 --正常,仅当前域名可用--
mycookie.set("Key5","Value5","","www.example.com");
console.log(mycookie.getAll());
})
(1)domain规则:
(2)path规则
本文为冯奎原创文章,转载无需和我联系,但请注明来自冯奎博客fengkui.net
最新评论