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下的所有子域名。
cookie设置域名问题,cookie跨域的更多相关文章
- .Net 通过设置Access-Control-Allow-Origin来实现跨域访问
目录 # 前言 # 为每个API接口单独添加响应头 1.针对 ASP.NET MVC 项目的Controllers 2.针对 ASP.NET Web API项目的Controllers 3.针对ASP ...
- [跨域]js设置document.domain实现跨域
document.domain用来得到当前网页的域名.比如在地址栏里输入: 代码如下: javascript:alert(document.domain); //www.jb51.net 我们也可以给 ...
- vue访问外部接口设置代理,解决跨域(vue-cli3.0)
vue-cli3.0搭建的项目,平时访问内部接口配置了拦截器,今天需要调用天气预报的外部接口,发现跨域问题,通过配置代理解决. 1.在vue.config.js中配置代理 module.exports ...
- Java中设置多个Access-Control-Allow-Origin跨域访问
1.如果服务端是Java开发的,添加如下设置允许跨域即可,但是这样做是允许所有域名都可以访问,不够安全. response.setHeader("Access-Control-Allow-O ...
- js 跨域的问题 (同一个主域名不同的二级域名下的跨域问题) 解决 WdatePicker.js my97日期选择控件
例如域名是 a.xx.com 和 b.xx.com 如果一个页面中引入多个iframe,要想能够操作所有iframe,必须都得设置相同domain. 如果iframe的时候 a包含b 为 ...
- webpack-dev-server 设置反向代理解决跨域问题
一.设置代理的原因 现在对前端开发的要求越来越高,并且随着自动化以及模块化的 诞生,前后端开发模式越来越流行.后端只负责接口,前端负责数据展示.逻辑处理.但是前后端开发模式,有一个重要的问题,就是跨域 ...
- 将网页设置为允许 XMLHttpRequest 跨域访问
在非IE下,使用XMLHttpRequest 不能跨域访问, 除非要访问的网页设置为允许跨域访问. 将网页设置为允许跨域访问的方法如下: Java Response.AddHeader("A ...
- php后端控制可跨域的域名,允许图片跨域上传
跨域问题经常需要面对,前端需要做的比较直接要么选择ajax异步提交,XML或者jsonp,要么表单提交前端常见跨域解决方案 jsonp基本可以搞定大部分跨域问题,但问题也比较明显,只能通过get方式提 ...
- mac上设置新版chrome浏览器跨域
设置方法 打开一个新的可跨域的chrome窗口实现方法: 1. 打开终端 2. 输入下面的命令( 需要替换路径中的yourname ) open -n /Applications/Google\ Ch ...
随机推荐
- 常见JS写法
1.在DIV中找某个CLASS $('.doc_input', 'div')
- 搭建微信小程序的本地测试服务器 json-server
1.首先需要在windows环境下安装node.js 选择 Windows Installer 下载对应的系统版本就行,然后一路next,这种方式安装好以后会把环境变量也配置好了,直接在命令行下输入 ...
- vue较深入的知识点
1 理解何为虚拟节点 虚拟dom是什么? 虚拟dom就是通过js对象来模拟描述dom树,包括tag,attr, children等属性来代表标签名,属性,子元素等.由于不需要有操作dom的方法,所以比 ...
- 团队作业第六次-团队Github实战训练
格式描述 课程名称:软件工程1916|W(福州大学) 作业要求:项目系统设计与数据库设计 团队名称:为了交项目干杯 GitHub地址:地址 作业目标:搭建一个相对公平公正的抽奖系统,根据QQ聊天记录, ...
- Windows XP 的最高版本 .net framework 安装
注意: Windows XP 系统已于2014年4月8日停止维护.出于安全.性能及新设备支持考虑,应立即停止使用. 安装 Windows XP SP3 所支持的最高.net framework 版本为 ...
- Python爬虫基础之Cookie
一.Cookie会话 简单地说,cookie就是存储在用户浏览器中的一小段文本文件.Cookies是纯文本形式,它们不包含任何可执行代码.一个Web页面或服务器告之浏览器来将这些信息存储并且基于一系列 ...
- C# 登陆验证码工具类VerifyCode
using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; ...
- springboot idea 代码更改自己编译设置
第一步:在pom.xml文件中添加springboot 编译依赖 <dependency> <groupId>org.springframework.boot</grou ...
- vue的动态路由(登录之后拿到动态路由通过addRouters()动态添加路由)
登录后我们拿到路由动态路由,后端传的数据可能为这个 { path: '/index', meta: { title: '首页', icon: 'icon-shouye', tab_index: , / ...
- 如何给PDF文件制作书签
书本阅读的时候我们有时候会制作一些漂亮的书签,那么电子文档也是有书签的,要怎么制作小伙伴们都知道吗?应该会有许多的小伙伴还不知道,今天就为大家分享一下电子文件如何添加书签的.就以PDF这个现在常用的电 ...