zoukankan      html  css  js  c++  java
  • Cookie设置域名问题,cookie跨域

    今天研究一天发现cookie无法设置除当前域名或者其父域名之外的其他domain.

    这个是浏览器出于对cookie的保护造成的,也就是cookie无法跨域设置。

    对于子域名也有如下规则,当前域名只能设置当前域名以及他的父域名,不能设置子域名

    如在www.wo.cao.baidu.com  域名下只能设置 cao.baidu.com,baidu.com

    不能设置 da.jia.wo.cao.baidu.com的cookie。

    一篇文章还不错,摘录下来

    当我们给网站设置cookie时,大家有没有发现在网站的其他域名下也接收到了这些cookie。这些没用的cookie看似不占多少流量,但如果对一个日PV千万的站点来说,那浪费的资源就不是一点点了。因此在设置cookie时,对它的作用域一定要设置准确了。

    我们都知道在PHP中用setcookie 来设置网站的cookie,该函数的用法如下:

    bool setcookie ( string $name [, string $value [, int$expire = 0 [, string$path [, string $domain [, bool$secure = false [, bool$httponly = false ]]]]]] )
     

    今天我们就来探讨一下它的第五个参数$domain,因为它决定了cookie的作用域。

    现在有如下3个域名,一个顶级域名、一个二级域名和一个三级域名:

    ① zydya.com
    ②blog.zyday.com
    ③one.blog.zyday.com

    • 首先在①zyday.com域名下设置cookie,做四次测试,分别设置domain参数为空、'zyday.com'、'blog.zyday.com'与'one.blog.zyday.com'。
      √表示该域名下能取到cookie,×表示不能取到cookie
    domain参数 zydya.com blog.zyday.com one.blog.zyday.com
    setcookie('name',1,time()+1)  √  √  √
    setcookie('name',1,time()+1,'/','zyday.com')  √  √  √
    setcookie('name',1,time()
    +1,'/','blog.zyday.com')
     ×  ×  ×
    setcookie('name',1,time()
    +1,'/','one.blog.zyday.com')
    × × ×

    当domain设置为空时,domain默认为当前域名,并且该域名下的子域名都可以接收到cookie。
    但是domain参数设置其子域名时,所有域名就接收不到了,包括那个子域名。

    • 然后在②blog.zyday.com域名下设置cookie,测试条件同上
    domain参数 zydya.com blog.zyday.com one.blog.zyday.com
    setcookie('name',1,time()
    +1)
    ×
    setcookie('name',1,time()+1,'/','zyday.com')
    setcookie('name',1,time()+1,'/','blog.zyday.com') ×
    setcookie('name',1,time()+1,'/',one.blog.zyday.com') × × ×

    看第二行,domain参数是zyday.com,是blog.zyday.com的父域名,那么zyday.com下所有子域名(包括zyday.com、blog.zyday.com、one.blog.zyday.com)都能接收到cookie。
    当domain为自身域名时,那么其父域名受影响,其本身与其子域名可以接收到cookie。
    而设置其子域名或其他域名时,所有域名都接收不到cookie了。

    • 最后在③one.blog.zyday.com域名下设置cookie
    domain参数 zydya.com blog.zyday.com one.blog.zyday.com
    setcookie('name',1,time()
    +1)
    × ×
    setcookie('name',1,time()+1,'/','zyday.com')
    setcookie('name',1,time()+1,'/','blog.zyday.com') ×
    setcookie('name',1,time()+1,'/',one.blog.zyday.com') × ×

    第三个测试得出的结论在上面已经总结了。再看一遍,这里就不多解释了。

    domain的设置,有两点要注意:

    1.在setcookie中省略domain参数,那么domain默认为当前域名。

    2.domain参数可以设置父域名以及自身,但不能设置其它域名,包括子域名,否则cookie不起作用。

    那么cookie的作用域:

    cookie的作用域是domain本身以及domain下的所有子域名。

       生命不息
       希望不止
       将来的你
       一定会感谢现在拼命的自己
       fighting!!!
  • 相关阅读:
    BootStrap Table前台和后台分页对JSON格式的要求
    神奇的外部嵌套(使用ROW_NUMBER()查询带条件的时候提示列名无效)
    要想获取select的值,使用ng-modle,否则无法获取select 的值
    Angular使用操作事件指令ng-click传多个参数示例
    Jenins 邮件通知
    Jenkins 流水线(Pipeline)
    Jenkins Master-Slave 架构
    Jenins 参数化构建
    Jenkins 用户权限管理
    Jenkins 安装
  • 原文地址:https://www.cnblogs.com/lonelyshy/p/10179762.html
Copyright © 2011-2022 走看看