`

cookie 跨域问题

 
阅读更多
SSO COOLIE 跨域问题

http://jhjguxin.sinaapp.com/2012/09/13/ie-iframe-p3p-cookies-oh-my/
引用

IE, IFRAME, P3P, COOKIES,

测试新浪微游戏接口时,发现一个问题:当使用IE浏览器的时候,rails的session无法保存。之前在自己开发服务器上测试时,验证过IE和Firefox都能正常使用session的,觉得很是奇怪。

通 过抓包发现,正常情况下,服务器端在响应客户端访问请求后,在返回的http头中会有Set-Cookies这样的参数,同时在接下来的客户端的http 请求头中,会加上Cookie这样的参数;上述不能正常保存session情况下的抓包分析发现,客户端的http请求头中浏览器没有设置Cookie参 数。

解决方法一:修改IE的默认Cookie设置,设置IE隐私设置中的高级隐私设置,勾选“总是允许回话Cookie”,这样session的值就能正常保存了。不过这样肯定不是最好的解决办法,对大多数用户来说,这样做不合理。

解决方法二:参考方法来自: http://www.sympact.net/2008/07/rails-and-ifram.html ,文中描述了具体原因,是因为IFrame中打开的链接和主页面的链接不在同一个域,所以IE默认会认为是不可信任的,则不允许使用Cookie。解决办 法正如文中所示,在controller中的before_filter中增加一个方法,此方法中设置响应的http相应头中增加P3P参数,问题即可解 决。

headers['P3P'] = 
"policyref=\"/w3c/p3p.xml\", 
CP=\"ALL DSP COR CURa ADMa DEVa TAIa OUR BUS IND UNI COM NAV INT\""






引用

“用P3P header解决iframe跨域访问cookie/session”的问题
理论很简单,而且模式也和大多请求返回状态的SSO差不多.但是有几个地方是要注意一下的.
1.页面里的COOKIE不能是浏览器进程的COOKIE(包括验证票和不设置超时时间的COOKIE),否则跨域会取不到.这点做跨域COOKIE的人比较少提到.不过实际上留意下几家大学做的方案,有细微的提到他们的验证模块里的COOKIE是有设置超时时间的.
2.当利用IFRAME时,记得要在相应的动态页的页头添加一下P3P的信息,否则IE会自觉的把IFRAME框里的COOKIE给阻止掉,产生问题.本身不保存自然就取不到了.这个其实是FRAMESET和COOKIE的问题,用FRAME或者IFRAME都会遇到.
3.测试时输出TRACE,会减少很多测试的工作量.
只需要设置 P3P HTTP Header,在隐含 iframe 里面跨域设置 cookie 就可以成功。他们所用的内容是:
P3P: CP=’CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR’

ASP直接在头部加了头部申明,测试有效。
<%Response.AddHeader “P3P”, “CP=CAO PSA OUR”%>

php的话,我没去试,应该是如下写法:
header(‘P3P: CP=CAO PSA OUR’);

ASP.NET的话
通过在代码上加Response.AddHeader(“P3P”, “CP=CAO PSA OUR”)或者在Window服务中将ASP.NET State Service 启动。
JSP:response.setHeader(“P3P”,”CP=CAO PSA OUR”)

如何在静态页面加头信息 P3P: CP=”CAO PSA OUR 来解决框架与cookie的问题?
IIS站点管理器允许你给所有输出的内容都加上任意HTTP Header,你只要在Custom Header里面加上P3P: CP=”CAO PSA OUR”
就ok了

简单介绍 P3P 技术
http://blog.csdn.net/yxtyxt3311/article/details/4893775
分享到:
评论

相关推荐

    Django的cookie跨域问题解决方法

    实验室大作业购物商城示范

    cookie跨域代码

    cookie跨域后端代码,主要解决跨域的问题,在servlet部分,供初学者使用

    Cookie跨域问题解决方案代码示例

    比如说门户和应用,分别部署在不同的机器或者web容器中,假如用户登陆之后会在浏览器客户端写入cookie(记录着用户上下文信息),应用想要获取门户下的cookie,这就产生了cookie跨域的问题。  二、介绍一下cookiev...

    axios中cookie跨域及相关配置示例详解

    自从入了 Vue 之后,一直在用 axios 这个库来做...下面这篇文章主要给大家介绍了关于axios中cookie跨域及相关配置的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起看看吧。

    如何使用localstorage代替cookie实现跨域共享数据问题

    因为cookie在跨域的情况下,浏览器根本不允许互相访问的限制,为了突破这个限制,所以有了以下这个实现方案,使用postmessage和localstorage进行数据跨域共享。 原理比较简单,但是遇到的坑也不少,这里梳理一下,做...

    asp.net cookie跨域

    asp.net cookie跨域小例子,这是httpwebrequest的这种方式来做的。 要想测试这个跨域,我们需要修改本地的host文件,配置两个域名,例如 127.0.0.1 www.xj5u.com 127.0.0.1 cc.xj5u.com 第一个项目绑定第一个域名...

    跨域访问解决方案,关于跨域访问cookie的资料

    跨域访问解决方案,关于跨域访问cookie的资料

    Dubbox跨域请求、Cookie设置

    Dubbox跨域请求,配置CORS服务来解决跨域问题,亲测可用。

    利用nginx解决cookie跨域访问的方法

    其他系统可以共享这个cookie。但是新的四台服务器中并没有申请域名,只有四个ip: 192.168.0.1 单点登录服务器 192.168.0.2 192.168.0.3 192.168.0.4 因为每台服务器有两个项目,都用到单点登录,所以通过修改新的...

    cookie 跨域

    应某网友请求,做的一个Cookie跨域的简单演示 请将HTML和PHP文件放入不同的域名下测试,然后修改下面Js的调用地址

    session、cookie的跨域共享

    该文件可以通过代码实例,让你清楚的理解session和cookie的意思,当你明白了这点,你就可以设计出来单点登录功能,同一账号在同一时间只能登录一次功能。同时你可以通过ie、firefox去测试你对session、cookie的理解...

    基于可变Cookie的跨域单点登录

    针对单点登录中的跨域身份认证问题,提出了一种基于可变Cookie的方案解决跨域单点登录,使用随机数字生成票据,并作为传统加密算法的会话密钥对客户端的Cookie进行加密,采用现代加密算法在异域系统之间安全传递票据,...

    jiangbo0216#wiki#cookie跨域共享1

    nginx配置文件#是否允许跨域发送Cookieif ($request_method = 'OPTIONS') {跨域携带发送cookie如果需要允许跨域携带

    跨域携带cookie案例.rar

    前后端分离必定面临跨域问题,以下是两个跨域请求携带cookie的nginx服务,完美演示跨域请求携带cookie

    WebApi 跨域问题解决方案:CORS

    同源策略:出于安全考虑,浏览器会限制脚本中发起的跨站请求,浏览器要求JavaScript或Cookie只能访问同域下的内容。...因为我们的WebApi和MVC是两个不同的项目,所以运行起来之后就存在上面说的跨域的问题。

    解决springboot实现跨域session共享问题

    解决springboot实现跨域session共享问题,防止sql注入。可以更有效的解决token问题,欢迎下载,有问题可以再评论下方留言,及时解答!!加群:687942640

    asp.net(C#)跨域及跨域写Cookie问题

    解决方法是: 代码如下: //www.B.com里的被调用的页面需要写P3P头,从而解除IE对写Cookie的阻止 context.Response.AddHeader(“P3P”, “CP=CAO PSA OUR”); //www.A.com里通过ajax调用www.B.com里的内容时,是跨域...

    asp.net Cookie跨域、虚拟目录等设置方法

    Expires 过期时间 跨域操作需要设置域属性: Response.Cookies(“MyCookie”).Domain = “jb51.net”; (这里指的是泛域名) 这样在其它二级域名下就都可以访问到了, ASP 和 ASP.NET 测试通过 虚拟目录下访问: 我在...

Global site tag (gtag.js) - Google Analytics