2010三月2
JavaScript cookie与domain
在使用JavaScript设置cookie时,懒的时候经常忘记设置domain,但是昨天就遇到了一个奇怪的问题。
同名的 cookie,不同的 domain 或不同的 path,属不同的 cookie;
同名的 cookie,相同的 domain 且相同的 path,不同的 expires,属同一个 cookie。
由于页面重载,会导致我一个页面有两个setCookie函数,但是其中一个指定了domain,另一个没有指定,这样就存在了问题。即,当我想要删除一个cookie的时候,我需要把两个domain下的cookie值都给置为过期,否则不起作用。
因为JavaScript中,函数是可以进行重载的。而原因我却找了半天,看来自己对cookie的理解还是属于一知半解的水平。残念啊。。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>cookie demo</title>
</head>
<body>
<script type="text/javascript">
function getCookie(name){
var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
if(arr=document.cookie.match(reg)) return unescape(arr[2]);
else return null;
}
function setCookie(name,value)
{
alert('这是第一个setCookie');
var expire = arguments[2] ? arguments[2] : 365*24*60*60*1000;
var exp = new Date();
exp.setTime(exp.getTime() + expire);
document.cookie = name + "="+ escape (value) + ";path=/;expires=" + exp.toGMTString();
}
function setCookieValue(name,value){
setCookie(name,value);
}
setCookieValue('name','value1');
</script>
<input type="button" value="setCookie" onclick="setCookieValue('name','value2')" />
<input type="button" value="getCookie" onclick="alert(getCookie('name'))" />
<input type="button" value="getAll" onclick="alert(document.cookie);" />
<script type="text/javascript" src="cookie.js"></script>
</body>
</html>
<html>
<head>
<title>cookie demo</title>
</head>
<body>
<script type="text/javascript">
function getCookie(name){
var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
if(arr=document.cookie.match(reg)) return unescape(arr[2]);
else return null;
}
function setCookie(name,value)
{
alert('这是第一个setCookie');
var expire = arguments[2] ? arguments[2] : 365*24*60*60*1000;
var exp = new Date();
exp.setTime(exp.getTime() + expire);
document.cookie = name + "="+ escape (value) + ";path=/;expires=" + exp.toGMTString();
}
function setCookieValue(name,value){
setCookie(name,value);
}
setCookieValue('name','value1');
</script>
<input type="button" value="setCookie" onclick="setCookieValue('name','value2')" />
<input type="button" value="getCookie" onclick="alert(getCookie('name'))" />
<input type="button" value="getAll" onclick="alert(document.cookie);" />
<script type="text/javascript" src="cookie.js"></script>
</body>
</html>
function setCookie(name,value)
{
alert('这是第二个setCookie');
var expire = arguments[2] ? arguments[2] : 365*24*60*60*1000;
var exp = new Date();
exp.setTime(exp.getTime() + expire);
var domain = "xiaoxiaozi.com";
document.cookie = name + "="+ escape (value) + ";domain="+domain+";path=/;expires=" + exp.toGMTString();
}
{
alert('这是第二个setCookie');
var expire = arguments[2] ? arguments[2] : 365*24*60*60*1000;
var exp = new Date();
exp.setTime(exp.getTime() + expire);
var domain = "xiaoxiaozi.com";
document.cookie = name + "="+ escape (value) + ";domain="+domain+";path=/;expires=" + exp.toGMTString();
}
演示地址:http://www.xiaoxiaozi.com/code/demo/cookie.html
大家可以看到,首先调用的是第一个setCookie函数,而按钮调用的是第二个setCookie函数

让我们看一下为何有两个同名的cookie

完全是因为domain不同,可悲啊。。
文章作者:simaopig
本文地址:http://www.xiaoxiaozi.com/2010/03/02/1711/
版权所有 © 转载时必须以链接形式注明作者和原始出处!