今天研究一天发现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. asp.net core NLog将日志写到文件

    1.安装Nlog包 Install-Package NLog.Extensions.Logging -Pre 2.在项目添加nlog.config文件 2.1.nlog.config <?xml ...

  2. LOJ #6539 奇妙数论题

    不想咕太久..就随便找个题更一下 LOJ#6539 题意 求题面里那个式子 题解 有一个常用的小式子 $$\sum_{x|a,x|b}\varphi(x)=\gcd(a,b)$$ 用这个式子直接对题面 ...

  3. python模块------pyinotify

    介绍 pyinotify模块用来监测文件系统的变化,依赖于Linux内核的inotify功能,inotify是一个事件驱动的通知器,其通知接口从内核空间到用户空间通过三个系统调用.pyinotify结 ...

  4. jQuery新版本没有了Toggle事件,两个按钮分别控制隐藏显示,同时这两个按钮点击也要互斥。

    十二月没来得及整理发布,一直在草稿箱.现在已经2019年1月了... 需求大概是这样的 //XX点击事件 var flagBar = 0; $("#doNotBaseRate"). ...

  5. 使用freemarker生成word文档处理表格数据

    1.把需要从数据库取值的字段用${}括起来,如:${busDate};2.表格数据的循环需要加标签:<#list tbl3 as tbl3>......</#list>< ...

  6. mybatis一对多查询之collection的用法

    首先看一下返回的数据的格式: //获取端子信息List<Map<String, Object>> portList = doneTaskDao.queryTroubleTask ...

  7. Freemarker网页静态化

    Freemarker的jar包 创建整合spring的配置文件 <?xml version="1.0" encoding="UTF-8"?> < ...

  8. MUI上传图片之选择相册和相机上传

    1.因为项目中有三处地方需要上传,所以html中存在三处地方.身份证正反面为上传一张,发票限制上传9张. <div class="action1"> <!--展示 ...

  9. java异常,异常处理,异常类 关键字:throws 和 throw 自定义的异常类

    package cn.kecheng; import java.util.Scanner; /**异常:异常是指在程序的运行过程中所发生的不正常的情况,它会中断正在运行的程序 异常处理机制:java中 ...

  10. systemctl: command not found

    可以使用service代替 service语法有一点区别 这里演示了错误语法和正确语法