不同目录写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) {