//设置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函数。