同名的 cookie,不同的 domain 或不同的 path,属不同的 cookie; 
同名的 cookie,相同的 domain 且相同的 path,不同的 expires,属同一个 cookie

解决方案 »

  1.   

    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,之间不会相互覆盖。 
      

  2.   

    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 即全球标准时间。 
      

  3.   

    指定可访问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=/";
      

  4.   

    请仔细看下我问题,谢谢!我的意思是同名cookie,同path,同domain,同expires,在cookie路径下的子目录中修改cookie值后(注:第一次创建和第二次修改不在同一路径,但设置cookie的path是一样的),为什么在第二次修改的目录中读cookie时变成2个,怎么解决!使修改与创建是同一cookie!并不是要基础知识,那个已经很熟了。
    如果实在不明白意思,那么,举个例照做一个就知道结果了:下面是在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>
      

  5.   


    同一站点,设置同一路径(都设了path=/),同一个expires,同一名称,先在根下创建,再在子目录修改其值
      

  6.   

    又如刚才的例子a.htm文件代码如下<html><head></head><body>
    <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>运行结果图片如下:
      

  7.   

    我想是不是你理解错误了
    假如你一直刷新b.htm的话
    那么显示的就都是在b.htm的cookie了
    因为之前的已经被覆盖了啊
    你用2个输出语句,他当然要输出2次了!
      

  8.   

    源文件代码完全直接COPY出来的,没改过,从代码中试
      

  9.   


    <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>
      

  10.   

    我也有同样的问题,烦死了。
    从理解上说,从任何子目录设置到根上,应该修改的是同一个
    可偏偏非常气人的是有两个相同名字的cookie却在不同的目录之下
    这也太坑爹了
    我觉得唯一的解决办法是先运行一下删除Cookie,到每一个子目录的页面中
    让页面干干净净不惹一丝尘埃。也许才得以获得净身
    因为在调试过程中,谁知道是不是有过错误的设置而地久天长地存在着讨厌的cookie呀