• js与cookie的domain和path之间的关系


    1、前言

    使用javascript操作cookie我们都经常使用,对cookie不是很了解的话可以看下这篇帖子[javascript操作cookie](http://www.cnblogs.com/Darren_code/archive/2011/11/24/Cookie.html "javascript操作cookie");常用的cookie知识点上面那位大神已经讲完了,有点点小补充顺便说下,不对的地方欢迎吐槽。

    2、外部js

      做网站经常要引入其他网站的js。一直以来我以为引入的js只能操作js链接所在域名下的cookie。比如在太平洋时尚网的pclady.com.cn的html页面中引入一个太平洋电脑网pconline.com.cn的js。我以为引入的js只能操作domian为www.pconline.com.cn的cookie;事实却不是这样子。引入的外部js其实等就同于本页面的js。所以pclady.com.cn中引入pconline.com.cn的js操作的是pclady.com.cn中cookie;

    3、结论

    我先说结论,不懂的可以查看测试连接;
    先说一个概念,域名wwww1.pclady.com.cn 顶级域名.com.cn 一级域名pclady.com.cn;二级域名 www1.pclady.com.cn

    3.1 默认domain和路径

    设置cookie时 cookie默认的domain为html文件所在的域名,path为html文件所在的路径比如http://www1.pclady.com.cn/zt/20160623/testCookie.html 链接中的js设置cookie,默认情况下cookie情况如图:

    3.2 domain规则,

    • 设置cookie——设置cookie的时候,domain要符合域名的规则,比如可以设置成www1.pclady.com.cn和pclady.com.cn 但是不能设置成pclady。要有.com.cn或者其他域名做结尾。 通过js手动设置cookie的domain都是以.开头的。比如设置domain=pclady.com.cn,实际的domain名为.pclady.com.cn;删除cookie时加不加.都可以。
    • 获取cookie——js只能获取domian大于等于当前页面域名的cookie。比如http://www1.pclady.com.cn/zt/20160623/testCookie.html页面中的js能获取domain为“www1.pclady.com.cn”和“.www1.pclady.com.cn”和“.pclady.com.cn”但是获取不到“g.pclady.com.cn”中的cookie;
    • 删除cookie——要删除一个cookie,domain值必须跟要删除cookie的domain相同,默认的domain为html文件的domain。
    • 跨域domain——js不可以把cookie设置成不同与html域名的domian。cookie设置不会成功,但不会影响后面程序对cookie的操作。
    • 错误——如果domain设置错误,该cookie将不会被创建,并且后续对cookie的操作不论正确与否都会被浏览器禁止。

    3.3 path规则

    • 设置cookie——js设置path要以"/"开头,比如html路径为"/zt/20160623/",路径可以设置成"/"或"/zt"。
    • 获取cookie——使用js只能获取path大于等于当前页面path的cookie,比如html路径为/zt/20160623/,使用js只能获取“/zt/20160623/”和“/zt”和“/”路径下的cookie。不能获取其他路径下的cookie
    • 删除cookie——删除cookie的时候路径也必须相同,默认的路径是html的path路径。
    • 错误——如果path不是以"/"开头的则创建cookie的path使用默认的path;如果是以"/"开头但是设置错了,路径名不存在或者直接设置成子路径。比如设置成"/20160623"或者"/zt1",该cookie将不会被创建,并且后续对cookie的操作不论正确与否都会被浏览器禁止。

    4、总结

    4.1、页面能访问那些cookie跟从哪里引入js没有半毛钱关系。而跟html页面本身的domain和path有很直接的关系

    4.2、要删除一个cookie,domain和路径必须完全相同。

    5、测试过程(可忽略)

    5.1、测试程序:

    5.2.1、pclady下的cookie设置情况

    注意:chrome的Resources面板下能查看哪些cookie就可以通过js获取哪些cookie。查看不到的当然也不能通过js获取。这也证明了,js操作cookie只跟页面有关,跟js来自哪里没有关系。
    html链接:http://www1.pclady.com.cn/zt/20160623/testCookie.html
    设置cookie的js链接:http://www1.pconline.com.cn/zt/20160622/GCookie-bf.js

    5.3、pcbaby下的cookie情况

    html链接:http://www1.pclady.com.cn/zt/20160623/testCookie.html
    设置cookie的js链接:http://www1.pconline.com.cn/zt/20160622/GCookie-bf.js
    检查cookie链接:http://www1.pcbaby.com.cn/zt/20160623/testCookie2.html

    chrome的Resources面板中cookie是空的。所以cookie没有设置成功。

  • 相关阅读:
    javascript typeof 和 instanceof 的区别和联系
    || and && 理解
    jquery选择器总结
    overflow-y:auto 回到顶部
    HTML 获取屏幕,浏览器,页面的高度
    height()、innerHeight()、outerHeight()函数的区别详解
    git入门篇-----本地操作
    sublime快捷键
    Atom 和 VSCode 同一天发布神器:实时编码分享
    编辑器插件和配置备份神器--sync setting
  • 原文地址:https://www.cnblogs.com/linux-centos/p/5806595.html
Copyright © 2020-2023  润新知