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跨域能够确保用户登录状态等敏感信息在不同域...
在开发Web应用时,我们经常会遇到跨域问题,特别是在使用Vue.js等前端框架与后端API进行交互时。Axios作为一个流行的JavaScript库,用于处理HTTP请求,它在处理跨域请求时,特别是涉及到Cookie时,有一些特殊的配置...
cookie跨域后端代码,主要解决跨域的问题,在servlet部分,供初学者使用
在现代Web开发中,跨域问题一直是困扰开发者的一大难题。当浏览器出于安全考虑阻止不同源之间的数据交互时,跨域问题便产生了。为了解决这一问题,并确保在跨域场景下可以正确地处理Cookie信息,本文将详细介绍几种...
因为cookie在跨域的情况下,浏览器根本不允许互相访问的限制,为了突破这个限制,所以有了以下这个实现方案,使用postmessage和localstorage进行数据跨域共享。 原理比较简单,但是遇到的坑也不少,这里梳理一下,做...
asp.net cookie跨域小例子,这是httpwebrequest的这种方式来做的。 要想测试这个跨域,我们需要修改本地的host文件,配置两个域名,例如 127.0.0.1 www.xj5u.com 127.0.0.1 cc.xj5u.com 第一个项目绑定第一个域名...
【标题】"Dubbox跨域请求、Cookie设置"所涉及的知识点主要集中在分布式服务框架Dubbo的跨域问题处理和Cookie的配置上。Dubbox是阿里巴巴开源的一个基于Dubbo的扩展,提供了更多的特性,如REST支持、Zookeeper注册...
### 前端后端跨域问题解析及解决方案 #### 跨域问题概述 跨域问题,即Cross-Origin Resource Sharing(CORS),是指浏览器出于安全考虑,在不同源之间执行网络请求时实施的一种限制机制。根据同源策略的规定,只有...
标题中的“Cookie跨域”指的是在互联网应用中,由于浏览器的同源策略限制,通常情况下,Cookie只能由创建它的源(即域名)读取。但有时候开发者需要在不同域名之间共享用户状态或会话信息,这时就需要实现Cookie的...
**P3P Header 解决Cookie跨域问题** 在互联网中,由于同源策略的限制,JavaScript通常无法在不同域名之间共享资源,包括Cookie。然而,有时我们可能需要在跨域场景下传递或读取Cookie,这时P3P(Platform for ...
### Cookie跨域问题 Cookie跨域是一个常见的需求,例如用户在`a.com`登录后希望在`b.com`也保持登录状态。由于同源策略的限制,直接设置`domain`无法实现跨主域的Cookie共享。但是,可以利用iframe实现跨域通信。 ...
window.name 解决跨域问题的文档 window.name 传输技术是 Thomas Frank 发明的,旨在解决 cookie 的一些劣势,例如每个域名 4 x 20 Kb 的限制、数据只能是字符串、设置和获取 cookie 语法的复杂等等。后来,Kris ...
为了解决Tomcat的跨域问题,我们需要理解CORS的工作原理,并通过配置Tomcat来允许特定的跨域请求。 首先,让我们理解一下CORS的基本概念。CORS是一种W3C标准,它允许浏览器通过在HTTP头中添加`Access-Control-Allow...
Java CXF Webservice接口在处理Web服务时,可能会遇到跨域问题,这通常是由于浏览器的安全策略限制了不同源之间的通信。解决这个问题的关键在于理解和应用CORS(Cross-Origin Resource Sharing)机制。CORS允许...
其他系统可以共享这个cookie。但是新的四台服务器中并没有申请域名,只有四个ip: 192.168.0.1 单点登录服务器 192.168.0.2 192.168.0.3 192.168.0.4 因为每台服务器有两个项目,都用到单点登录,所以通过修改新的...
该文件可以通过代码实例,让你清楚的理解session和cookie的意思,当你明白了这点,你就可以设计出来单点登录功能,同一账号在同一时间只能登录一次功能。同时你可以通过ie、firefox去测试你对session、cookie的理解...
JavaScript跨域问题,是Web开发中常见的一个挑战,由于浏览器的同源策略限制,JavaScript无法直接访问不同源的资源,这在实现某些功能时会带来不便。本文将深入探讨JavaScript跨域问题的原因、影响以及多种解决方案...
在Web开发中,Session和Cookie是两种常见的用户会话管理技术。它们被广泛应用于保持用户的登录状态,确保...通过学习和实践这个项目,开发者可以深入理解Web会话管理机制,以及如何在现代Web环境中优雅地解决跨域问题。