今天研究一天发现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下的所有子域名。

cookie设置域名问题,cookie跨域的更多相关文章

  1. .Net 通过设置Access-Control-Allow-Origin来实现跨域访问

    目录 # 前言 # 为每个API接口单独添加响应头 1.针对 ASP.NET MVC 项目的Controllers 2.针对 ASP.NET Web API项目的Controllers 3.针对ASP ...

  2. [跨域]js设置document.domain实现跨域

    document.domain用来得到当前网页的域名.比如在地址栏里输入: 代码如下: javascript:alert(document.domain); //www.jb51.net 我们也可以给 ...

  3. vue访问外部接口设置代理,解决跨域(vue-cli3.0)

    vue-cli3.0搭建的项目,平时访问内部接口配置了拦截器,今天需要调用天气预报的外部接口,发现跨域问题,通过配置代理解决. 1.在vue.config.js中配置代理 module.exports ...

  4. Java中设置多个Access-Control-Allow-Origin跨域访问

    1.如果服务端是Java开发的,添加如下设置允许跨域即可,但是这样做是允许所有域名都可以访问,不够安全. response.setHeader("Access-Control-Allow-O ...

  5. js 跨域的问题 (同一个主域名不同的二级域名下的跨域问题) 解决 WdatePicker.js my97日期选择控件

    例如域名是  a.xx.com  和 b.xx.com    如果一个页面中引入多个iframe,要想能够操作所有iframe,必须都得设置相同domain. 如果iframe的时候  a包含b  为 ...

  6. webpack-dev-server 设置反向代理解决跨域问题

    一.设置代理的原因 现在对前端开发的要求越来越高,并且随着自动化以及模块化的 诞生,前后端开发模式越来越流行.后端只负责接口,前端负责数据展示.逻辑处理.但是前后端开发模式,有一个重要的问题,就是跨域 ...

  7. 将网页设置为允许 XMLHttpRequest 跨域访问

    在非IE下,使用XMLHttpRequest 不能跨域访问, 除非要访问的网页设置为允许跨域访问. 将网页设置为允许跨域访问的方法如下: Java Response.AddHeader("A ...

  8. php后端控制可跨域的域名,允许图片跨域上传

    跨域问题经常需要面对,前端需要做的比较直接要么选择ajax异步提交,XML或者jsonp,要么表单提交前端常见跨域解决方案 jsonp基本可以搞定大部分跨域问题,但问题也比较明显,只能通过get方式提 ...

  9. mac上设置新版chrome浏览器跨域

    设置方法 打开一个新的可跨域的chrome窗口实现方法: 1. 打开终端 2. 输入下面的命令( 需要替换路径中的yourname ) open -n /Applications/Google\ Ch ...

随机推荐

  1. c语言int型和char型的自动类型转换

    ; //机器码为0xff unsigned ; //机器码0xfe if (a <= b){ printf("a <= b\n"); } else{ printf(&q ...

  2. 微信小程序注意点与快捷键

    注意点1. 微信对小程序的要求是整体大小不能超过1MB. 2. .json 是配置文件,其内容必须符合JSON格式,所以文件内部不允许有注释. 3. app.json 是全局配置文件,微信小程序中的每 ...

  3. matplotlib 生成 eps 插入到 tex

    matplotlib 生成 eps 插入到 tex matplotlib 生成 eps,就可以插入到 tex 中,而且是矢量图,放大不失真. 而且因为图中的元素都是嵌入到 pdf 中,所以图中的文字也 ...

  4. This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its de 错误解决办法

    这是我们开启了bin-log, 我们就必须指定我们的函数是否是1 DETERMINISTIC 不确定的2 NO SQL 没有SQl语句,当然也不会修改数据3 READS SQL DATA 只是读取数据 ...

  5. day 24-1 继承

    继承 什么是继承: 继承是一种创建新类的方式,在 python 中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 父类必须在子类上面 一个类 可以被多个类继承 一个 ...

  6. JAVA_Sprint学习(一)

    保存用户信息的编程思维 传统的思想,就是建立一个类之后,然后将用户的姓名和密码,以及添加用户等操作都放在一个main中, 按照抽象编程的思想而言, 首先建立一个类User,用来是表示用户的具体信息Us ...

  7. FATAL ERROR: please install the following Perl modules before executing

    运行安装mysql 报错 [root@localhost mysql-mult]# ./scripts/mysql_install_db  --defaults-file=conf/3306my.cn ...

  8. PADS Router VX.2.3 设置光标的类型

    操作系统:Windows 10 x64 工具:PADS Router VX.2.3 菜单:Tools > Options...(快捷键:Ctrl + <Enter>) 在Option ...

  9. mysql把一个查询结果当作一个子集来查询

    SELECT * FROM (SELECT * FROM table  GROUP BY column HAVING COUNT(column)>=3 ORDER BY column DESC ...

  10. 如何在MySQL中设置主从复制

    mysql主从同步定义 主从同步机制 配置主从同步 配置主服务器 配置从服务器 使用主从同步来备份 使用mysqldump来备份 备份原始文件 主从同步的小技巧 排错 Slave_IO_Running ...