<script> function setCookie(name, value, expires, path, domain) { if(!expires) expires = -1; if(!path) path = "/"; var d = "" + name + "=" + value; var e; if (expires < 0) { e = ""; } else if (expires == 0) { var f = new Date(1970, 1, 1); e = ";expires=" + f.toUTCString(); } else { var now = new Date(); var f = new Date(now.getTime() + expires * 1000); e = ";expires=" + f.toUTCString(); } var dm; if(!domain){ dm = ""; } else{ dm = ";domain=" + domain; } document.cookie = name + "=" + value + ";path=" + path + e + dm; };function getCookie(a) { var b = String(document.cookie); var c = b.indexOf(a + "="); if (c != -1) { var d = b.indexOf(";", c); d = d == -1 ? b.length : d; c = c + a.length + 1; if(b.charAt(c)=='"'&&b.charAt(d-1)=='"'){ c+=1;d-=1; } if(c>=d) return ""; return b.substring(c, d); } return ""; }; //setCookie("good", "hel43lo", 365, "/", document.domain) document.write(getCookie("good")); //alert(document.domain); //设置了path=/;应该就可以了。 </script>
document.cookie = "N1=2; path=/path";
document.cookie = "N1=3; path=path/"; 如上代码,前两句使用的是绝对路径,即相对于站点根目录的网页目录,第三句使用的是相对路径,相对于当前目录的。 第一句和第二句在于结尾不同,虽然他们所表达的权限相同,但是由于 path 字符串不同,会形成两个同名的 cookie,容易造成混乱,建议不要使用第二句这种格式,因为系统默认也是以 "/" 结尾的。 所以如上述是三个 cookie,之间不会相互覆盖。
cookie 有失效日期--expires,如果还没有过失效期,即使重新启动电脑,cookie 仍然不会丢失,如果没有指定 expires 值,那么在关闭浏览器时,cookie 即失效。 在 JS(JavaScript) 中使用 expires 时应该和 cookie 同时写入,如:
document.cookie = "clr=red; expires=" + expiresDate; 而如下写法是不正确的:
document.cookie = "clr=red";
document.cookie = "expires=" + expiresDate;
这样写会形成两个 cookie,第二个 cookie 的名称是 expires,两个 cookie 均没有指定失效日期。 expires 不可读
这就是为什么,我们在 ASP 中使用 response.Write request.cookies("cname").expires 会出错,同样在 JS(JavaScript) 中使用 document.cookie 也不会显示出 expires。 expires 值应该使用 GMT 格式的时间
var the_date = new Date("December 31, 2020");
var expiresDate = the_date.toGMTString(); //转换成 GMT 格式。编者者: GMT 即格林威治标准时间,现在也称 UTC 即全球标准时间。
默认情况下,如果在某个页面创建了一个cookie,那么该页面所在目录中的其他页面也可以访问该cookie。如果这个目录下还有子目录,则在子目录中也可以访问。例如在www.xxxx.com/html/a.html中所创建的cookie,可以被www.xxxx.com/html/b.html或www.xxx.com/ html/ some/c.html所访问,但不能被www.xxxx.com/d.html访问。
为了控制cookie可以访问的目录,需要使用path参数设置cookie,语法如下:
document.cookie="name=value; path=cookieDir";
其中cookieDir表示可访问cookie的目录。例如:
document.cookie="userId=320; path=/shop";
就表示当前cookie仅能在shop目录下使用。
如果要使cookie在整个网站下可用,可以将cookie_dir指定为根目录,例如:
document.cookie="userId=320; path=/";
如果实在不明白意思,那么,举个例照做一个就知道结果了:下面是在localhost/下的文件a.htm
<html><head></head><body>
<script language="javascript">
var d=new Date()
d.setTime(d.getTime+1000*3600*24)
document.cookie="cname=这是在根下写的cookie; path=/; expires="+d.toGMTString()
alert("你在根下写的cookie是:"+document.cookie)
</script>
</body>
</html>下面是在localhost/w/下的文件b.htm
<html><head></head><body>
<script language="javascript">
var d=new Date()
d.setTime(d.getTime+1000*3600*24)
alert("这是你在w下修改过前的cookie是(注意要与下面修改过后的cookie比较一下!):"+document.cookie)
document.cookie="cname=这是在w下的cookie被修改过了; path=/; expires="+d.toGMTString()
alert("这是你在w下修改过后的cookie是(注意与在根下读的cookie比较一下!):"+document.cookie)
</script>
</body>
</html>
同一站点,设置同一路径(都设了path=/),同一个expires,同一名称,先在根下创建,再在子目录修改其值
<script language="javascript">
var dd=new Date()
dd.setTime(dd.getTime() + (1000*3600*24))
document.cookie="cname=c1=这是在根下写的cookie; path=/;"
document.cookie=document.cookie+"; expires="+dd.toGMTString()
document.write("你在根下写的cookie是:"+document.cookie+"<br><br>")
document.write(dd.toGMTString())
</script>
</body>
</html>运行结果图片如下:
b.htm文件代码如下<html><head></head><body>
<script language="javascript">
var dd=new Date()
dd.setTime(dd.getTime() + 1000*3600*24)
document.write("这是你在w下修改过前的cookie是(注意要与下面修改过后的cookie比较一下!):"+document.cookie+"<br><br>")
document.cookie="cname=c1=这是在w下的cookie被修改过了; path=/;"
document.cookie=document.cookie+"; expires="+dd.toGMTString()
document.write("这是你在w下修改过后的cookie是(注意与在根下读的cookie比较一下!):"+document.cookie+"<br><br>")
document.write(dd.toGMTString())
</script>
</body>
</html>运行结果图片如下:
假如你一直刷新b.htm的话
那么显示的就都是在b.htm的cookie了
因为之前的已经被覆盖了啊
你用2个输出语句,他当然要输出2次了!
<script>
function setCookie(name, value, expires, path, domain)
{
if(!expires) expires = -1;
if(!path) path = "/";
var d = "" + name + "=" + value; var e;
if (expires < 0) {
e = "";
}
else if (expires == 0) {
var f = new Date(1970, 1, 1);
e = ";expires=" + f.toUTCString();
}
else {
var now = new Date();
var f = new Date(now.getTime() + expires * 1000);
e = ";expires=" + f.toUTCString();
}
var dm;
if(!domain){
dm = "";
}
else{
dm = ";domain=" + domain;
} document.cookie = name + "=" + value + ";path=" + path + e + dm;
};function getCookie(a)
{
var b = String(document.cookie);
var c = b.indexOf(a + "="); if (c != -1) {
var d = b.indexOf(";", c);
d = d == -1 ? b.length : d;
c = c + a.length + 1;
if(b.charAt(c)=='"'&&b.charAt(d-1)=='"'){
c+=1;d-=1;
}
if(c>=d)
return "";
return b.substring(c, d);
} return "";
};
//setCookie("good", "hel43lo", 365, "/", document.domain)
document.write(getCookie("good"));
//alert(document.domain);
//设置了path=/;应该就可以了。
</script>
从理解上说,从任何子目录设置到根上,应该修改的是同一个
可偏偏非常气人的是有两个相同名字的cookie却在不同的目录之下
这也太坑爹了
我觉得唯一的解决办法是先运行一下删除Cookie,到每一个子目录的页面中
让页面干干净净不惹一丝尘埃。也许才得以获得净身
因为在调试过程中,谁知道是不是有过错误的设置而地久天长地存在着讨厌的cookie呀