日期:2014-05-16  浏览次数:20460 次

不同目录写cookie问题,解决立刻给分
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) {