Cookie的跨域问题
被误解的HttpCookie.Domain属性
有人说可以利用HttpCookie.Domain属性实现跨域访问,假如在A站(A.com)中写B站(B.com)的cookie,如下所示
这其实是错误的,运行后通过浏览器查看,并没有成功写入B站的cookie(读取也是一样失败,由于浏览器的隐私策略限制,禁止读取非本域的cookie).
所以这个Domain属性,应该是可以跨子域,例如x.A.com和y.A.com,通过设置HttpCookie.Domain=“.A.com”,实现跨子域访问。
//A站a_setCookie.aspx (www.a.com)
HttpCookie cookie = new HttpCookie("key");
cookie.Value = key;
cookie.Domain = ".b.com";//这里指定的是B站
cookie.Path = "/";
cookie.Expires = DateTime.Now.AddHours();
filterContext.RequestContext.HttpContext.Response.Cookies.Add(cookie);
既然cookie无法跨域共享,那如何实现跨域访问呢?
可以利用script标签间接调用B站的页面,实现写入B站cookie的目的。
步骤一:先在B站(b_setCookie.aspx)下设置cookie的方法:
HttpCookie cookie = new HttpCookie("key");
cookie.Value = key;
cookie.Domain = ".b.com";//这里指定的是B站
cookie.Path = "/";
cookie.Expires = DateTime.Now.AddHours(1);
Response.Cookies.Add(cookie);
步骤二:由于<script>标签可以自动访问第三方网站,因此可以在A站的页面,例如a_setCookie.aspx的页面<head>标签内下设置如下:
<head><script src="http://www.b.com/b_setCookie.aspx" /></head>
以上步骤完毕,当访问A站的a_setCookie.aspx时,就会自动访问http://www.b.com/b_setCookie.aspx,实现写入B站cookie的目的。
测试B站cookie是否设置成功,B站下新建页面b_getCookie.aspx,读取B站的cookie
var key=Request.cookie["key"];
//或者
key=Request["key"];
注意:访问b_getCookie.aspx前,先访问A站的a_setCookie.aspx
注意浏览器的第三方 cookie 限制
所谓第三方 cookie,就是说你访问域名 A的一个页面,却接收到域名 B 的 cookie 设定指令。那么B就属于第三方,不同浏览器对于第三方cookie的限制有些区别,如下表
IE | FIREFOX | CHROME | SAFARI | OPERA | |
---|---|---|---|---|---|
限制第三方coookie | 是 | 否 | 否 | 是 | 否 |
使用p3p跨域设置Cookie
p3p((Platform for Privacy Preferences))介绍
http://baike.baidu.com/link?url=WVQp0aTUQgCoIzYm7rV_mur829NtWZCiSq9Kee_WusqmOWOQDwS2DNzw_S5M6UM-EcvNCliBHvYAV4kEjRBip_
为了消除这个限制,可以在b_setCookie.aspx加上如下设置
Response.Headers.Add("P3P", "CP=/"CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR/"");
Cookie的跨域问题的更多相关文章
- 携带cookie的跨域访问
携带cookie的跨域解决方案 有的时候访问后台的请求需要携带cookie以供后台分析,比如jQuery的ajax请求: $.ajax({ url: a_cross_domain_url, xhrFi ...
- [php-cookie] cookie 请求跨域,如何共享
cookie 请求跨域的问题, 假设我有两个域名,一个 m.example.com,另一个是 www.example.com . 那么我需要如何设置 cookie 才可以在这两个域名都实现共享呢? / ...
- localStorage和cookie的跨域解决方案
原文转自:点我 前言 localStorage和cookie大家都用过,我前面也有文章介绍过,跨域大家也都了解,我前面也有文章详细描述过.但是localStorage和cookie的跨域问题,好多小伙 ...
- cookie解决跨域问题
v一.前言 随着项目模块越来越多,很多模块现在都是独立部署.模块之间的交流有时可能会通过cookie来完成.比如说门户和应用,分别部署在不同的机器或者web容器中,假如用户登陆之后会在浏览器客户端写入 ...
- cookie用法小结 cookie.setPath 跨域共享
1. JSP中Cookie的读写 Cookie的本质是一个键值对,当浏览器访问web服务器的时候写入在客户端机器上,里面记录一些信息.Cookie还有一些附加信息,比如域名.有效时间.注释等等. 下面 ...
- 跨域共享cookie和跨域共享session
转载自:http://blog.csdn.net/ahhsxy/article/details/7356128 这里所说的跨域,是指跨二级域名,而且这些域名对应的应用都在同一个app上, 比如我有以下 ...
- 后端设置Cookie前端跨域获取丢失问题(基于springboot实现)
1.跨域问题说明:后端域名为A.abc.com,前端域名为B.abc.com. 2.后端设置一个cookie发送给前台,domain应该是setDomain(“abc.com”),而不是setDoma ...
- Ajax跨域请求附带Cookie/Ajax跨域请求附带身份凭证
一.跨域请求中默认不带cookie等验证凭证 尤其对于post请求. 对于ajax请求,其中post,get都可以正常访问. withCredentials: false, // 允许携带cookie ...
- 使用Cookie实现跨域单点登录的原理
对于构建分布式系统来说业务功能的物理部署会随着新业务模块的增加而增加或改变物理部署的位置.而每个用户都有统一的帐号作为我们登录系统时的一个认证.当新业务或子系统部署在不同的物理机上,我们去访问不同的业 ...
随机推荐
- 使用妹子UI开发的体验分享
前阵子看到一个类似bootstrap的前端UI框架,好奇心驱使下,去琢磨了一些,最终决定网站改版用这个UI试试效果: 首页+头部: 投稿页: 现成拷贝过来的评论列表: 总结: 上手难度: (熟悉boo ...
- AngularJS:表达式
ylbtech-AngularJS:表达式 1.返回顶部 1. AngularJS 表达式 AngularJS 使用 表达式 把数据绑定到 HTML. AngularJS 表达式 AngularJS ...
- 微信小程序的基本认识
小程序与公众号的区别 小程序,不支持关注,消息推送等营销手段. 小程序更倾向于产品,公众号更倾向于营销. 在系统权限方面,小程序能够获得更多. 小程序与APP的区别 小程序,面向微信用户.app面向所 ...
- 22 mysql有那些”饮鸩止渴”提高性能的方法?
22 mysql有那些”饮鸩止渴”提高性能的方法? 正常的短连接模式是连接到数据库后,执行很少的SQL语句就断开,下次需要的时候再重新连接.如果使用的是短连接,在业务高峰期的时候,就可能出现连接数突然 ...
- Nginx反向代理图片总结
配置需求: 内网192.168.80.205的机器上部署了一个Web项目,下文称web, url为http://192.168.80.205:8082. 并且使用nginx访问图片,url格式 ...
- java成神之——MySQL Connector/J 的基本使用
使用示例 DBCP连接池 结语 使用示例 public class demo { static Connection con = null; static Statement st = null; s ...
- linux 下安装mysql-5.7.16
1.解压tar -xvf mysql的包 tar -xvf mysql-5.7.16-1.el6.x86_64.rpm-bundle.tar(mysql 官网中即可找到) 2.查看是否需要卸载安装时候 ...
- X11 转发
SecureCRT只支持字符界面,如果要在终端界面能弹出GUI,需要本地安装X11 server,然后服务器讲X11请求forward到本地,即可. x11 server 可以使用Xming, Xma ...
- Catch That Cow(bfs)
Description Farmer John has been informed of the location of a fugitive cow and wants to catch her i ...
- C#向pdf 添加水印
调用直接这样用: //PDFHelper.AddImageWatermarkPDF(path, "D://my.pdf", Server.MapPath("/HtmlTo ...