Cookie的获取、设置、删除及无法获取Cookie的原因

//设置cookie
function utils_setCookie(cname, cvalue, exdays) {
 var d = new Date();
 d.setTime(d.getTime() + (exdays*24*60*60*1000));
 var expires = "expires="+d.toUTCString();
 document.cookie = cname + "=" + cvalue + "; " + expires+";domain=.vko.cn;path=/";
}
//设置会话级别cookie
function utils_setCookie_s(cname, cvalue) {
 var expires = "";
 document.cookie = cname + "=" + cvalue + "; " + expires+";domain=.vko.cn;path=/";
}
//删除cookie
function utils_delCookie(name) { 
	console.log(name);
	var exp = new Date(); 
	exp.setTime(exp.getTime() - 1); 
	var cval = getCookieByName(name); 
	if(cval != null && cval != ''){
		document.cookie= name + "="+cval+";expires="+exp.toGMTString()+"; domain=.vko.cn; path=/"; 
	} 
}
//获取指定名称的cookie的值
function utils_getCookie(objname){
	var arrstr = document.cookie.split("; ");
	for(var i = 0;i < arrstr.length;i ++){
		var temp = arrstr[i].split("=");
		if(temp[0] == objname){
			return unescape(temp[1]);
		}
	}
	return "";
}
//获取指定名称的cookie的值——专门处理汉字
function utils_getCookie_gbk(objname){
	var arrstr = document.cookie.split("; ");
	for(var i = 0;i < arrstr.length;i ++){
		var temp = arrstr[i].split("=");
		if(temp[0] == objname){
			temp[1] = temp[1].substring(1,temp[1].length-1);//去掉""
			return decodeURIComponent(temp[1]);//解码(后台一定要编码)
		}
	}
	return "";
}

Cookie无法删除的原因:原文链接

今天遇到一个cookie的问题: 名叫username的,域为www.umiwi.com的cookie无法删除,导致用户登录以后无法退出。搞了半天终于发现问题所在:原来是我关于cookie的基础知识没搞清楚null 。。。。


    Cookie不仅仅有名字和值两个属性,还有域(domain),过期时间(expires),路径(path)等属性。 其中,不同的域、不同的路径下可以存在同样名字的cookie。 比如这个页面:  用鼠标戳我


    一般我们删除cookie的方法是用一个同样名字、过期时间为过去某个时候的Cookie覆盖之。 这时就一定要搞清楚你要删除的cookie的域和路径,Cookie域和路径要一样才能被覆盖。 否则产生的效果就是那个想要被删除的Cookie具有神奇的生命力,无法被清除~~~


    另外,我发现在设置Cookie的时候,如果没有指定域名,那么设置的这个cookie的域默认为当前域,比如www.umiwi.com。 如果设置的时候指定了某个域,那么浏览器存的时候会自动在前面加.。比如PHP代码: setcookie('test','a',0,'www.umiwi.com');  那么 浏览器里面存的Cookie的域为.www.umiwi.com。 所以,最好的方式是设置Cookie的时候怎么写的,删除的时候就怎么写。  要不就会出现我遇到的情况: 明明浏览器里看有 username=longbill,域为www.umiwi.com的Cookie,但是在php里写 setcookie('username','',time()-1000,'www.umiwi.com','/'); 无法删除那个Cookie。 原因就是我删Cookie的操作其实上是发了一个新的名叫username、值为空、过期时间为过去1000秒、域为.www.umiwi.com、路径为/的Cookie。这个Cookie发到浏览器马上就过期了,什么也看不到。而我要删除的在www.umiwi.com上的cookie还活的好好的。。。

    补充一下HTTP的知识: php里面的header函数发送的header信息默认是不重复的,后面发的会自动覆盖前面的内容。一般说来HTTP请求的header部分也是没有重复信息的,除了Set-Cookie头!  所以,如果我们使用header函数来发送cookie,请注意加第二个参数true。 详见header函数。

你可能感兴趣的:(JavaScript)