WEB站点根下有1个子目录FoldN/
现在我在站点根下写有cookie,如下:
document.cookie="myname=jjzzhhss; path=/"
在根下和目录FoldN/读myname都正常,都是myname=jjzzhhss;
在根下修改myname,读出来也正常
问题:
在目录FoldN/下修改myname后就出问题了,修改如下:
document.cookie="myname=aabbcc; path=/"
这时候,在根下读cookie时,值还是:
myname=jjzzhhss
然后,在FoldN/目录读cookie时,就变成了:
myname=jjzzhhss; myname=aabbcc
请教,如何使在FoldN/目录修改myname不会出现2个同名cookie?
请高手解答,解决测试成功,立刻送分!
------解决方案--------------------
同名的 cookie,不同的 domain 或不同的 path,属不同的 cookie;
同名的 cookie,相同的 domain 且相同的 path,不同的 expires,属同一个 cookie
------解决方案--------------------
cookie 有路径--path,表示哪些路径下的文件有权限读取该 cookie。
path 应该以 "/" 结尾,同名 cookie,不同 path,属不同的 cookie
document.cookie = "N1=1; path=/path/";
document.cookie = "N1=2; path=/path";
document.cookie = "N1=3; path=path/";
如上代码,前两句使用的是绝对路径,即相对于站点根目录的网页目录,第三句使用的是相对路径,相对于当前目录的。
第一句和第二句在于结尾不同,虽然他们所表达的权限相同,但是由于 path 字符串不同,会形成两个同名的 cookie,容易造成混乱,建议不要使用第二句这种格式,因为系统默认也是以 "/" 结尾的。
所以如上述是三个 cookie,之间不会相互覆盖。
------解决方案--------------------
path 权限有继承性
假如指定了 /test/ 目录有权限读取某 cookie,那么 /test/ 之下的目录 /test/t/ 也有权限读取该 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,那么该页面所在目录中的其他页面也可以访问
该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=/";
------解决方案--------------------
我这没有变成2个啊
你抓图出来看下
------解决方案--------------------
汗!这就奇怪了!
我这只显示一个!
------解决方案--------------------
没有啊,我测试了几遍都没有你说的那情况
------解决方案--------------------
我想是不是你理解错误了
假如你一直刷新b.htm的话
那么显示的就都是在b.htm的cookie了
因为之前的已经被覆盖了啊
你用2个输出语句,他当然要输出2次了!
------解决方案--------------------
- HTML code
<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>