转自:http://my.oschina.net/heguangdong/blog/49100
前段时间碰到一个问题,就是在IE下,使用iFrame嵌入页面时,该页面的会话级别的cookie无法写入,导致服务端始终无法获取JSESSIONID,每次都是产生一个新的,使得Session无法使用。
只需要设置 P3P HTTP Header,在隐含 iframe 里面跨域设置 cookie 就可以成功。
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")
一、关于IE6 IFrame或Frame中读写cookie的问题分析
IE6加入了以PlatformforPrivacyPreferences(P3P)为基础的 隐私保护功能,有关此功能的说明请参阅“”
在ie6中Cookie被分成了first party cookie和third party cookie,即第一方Cookie和第三方Cookie,所谓的第三方Cookie是指在Frame或者Iframe中嵌套页面的Cookie。
当第三方站点试图读写cookie时,IE6就会自动拦截(在状态栏下显示红色禁止图标)
在IE下是不能在IFrame中设置cookie的,在FF下可以,在HTTP 标头加入P3P后,即可解决该问题。
二、P3P
P3P是万维网联盟(W3C)公布的一项隐私保护推荐标准,旨在为网上冲浪的Internet用户提供隐私保护。现在有越来越多的网站在消费者访问时,都 会收集一些用户信息。制定P3P标准的出发点就是为了减轻消费者因网站收集个人信息所引发的对于隐私权可能受到侵犯的忧虑。P3P标准的构想是:Web 站点的隐私策略应该告之访问者该站点所收集的信息类型、信息将提供给哪些人、信息将被保留多少时间及其使用信息的方式,如站点应做诸如 “本网站将监测您所访问的页面以提高站点的使用率”或“本网站将尽可能为您提供更合适的广告”等申明。访问支持P3P网站的用户有权查看站点隐私报告,然 后决定是否接受cookie或是否使用该网站。
访问官方P3P网页以获取更多技术信息:http://www.w3.org/P3P。
三、相关技术文章
-
Help! IE6 Is Blocking My Cookies[1],[2]
a).What is P3P?
b).Why Does IE6 Block My Cookies?
c).What are Third-Party Cookies?
e).How Can I Prevent IE6 from Blocking My Cookies?
f).How Do I P3P Enable My Web Site and Use Compact Policies?
g).I P3P-Enabled My Site, But My Cookies are Still Being Blocked by IE6
h).My Cookies aren't being Blocked, But Users are Not Able to View an i).IE6 Privacy Report for My Site
- The Platform for Privacy Preferences 1.0 Deployment Guide
-
Make Your Web Site P3P Compliant
此文通过6个简单的步骤介绍如何在网站上实施P3P策略。
四、“官方”的解决方法
看完了第三节的文章你会发现,所谓P3P策略实际就是一个部署在Web服务器上的简单XML文件,指明网站打算使用哪些cookie以及派什么用途。这个XML文件类似这种格式
<META xmlns="http://www.w3.org/2000/12/P3Pv1">
<POLICY-REFERENCES>
<POLICY-REF about="/P3P/Policy1.xml">
<COOKIE-INCLUDE
name="*"
value="*"
domain="*"
path="*"/>
</POLICY-REF>
</POLICY-REFERENCES>
</META>
可以使用IBM的P3P策略编辑器IBM's P3P Policy Editor来编写这个文件。
三种部署方式:
1 Well-Know location
/w3c/p3p.xml
将P3P Reference File档案更名为p3p.xml,并放置在/w3c目录当中
2 HTTP 头
P3P:policyref="http://www.mysite.com/w3c/p3p.xml" CP="ALL DSP COR NID CUR OUR IND PUR"
CP是由3字符代码组成的列表(相关信息已经在W3C网站上进行了说明)。在上例中,该网站不定期地(INDefinite)为OUR公司收集购买商品项 目(PURchasing)或完成当前活动(CURrent)的有关数据。有疑问(DiSPutes)、不可识别(Nonidentifiable)的数 据作为cookie存储(NID)。由于我们的网站以cookie的方式存储客户号,所以NID应该从列表中删除。
CP应该匹配完整的策略;因此,如果你在CP中使用了NID,那么你应该在你的策略文件中包括<nonident/>标签。为了匹配这些设置 而在下一节介绍的校验工具会对以上代码进行检查,如果有差异的话,Internet Explorer 6.0浏览器也会检查策略文件并且令策略文件无效
如果是asp/asp.net/jsp/php等动态页面,也可以添加类似以下代码:
response.setHeader("P3P","policyref="http://www.mysite.com/w3c/p3p.xml" CP="ALL DSP COR CUR OUR IND PUR"");
3 在HTML内容中嵌入Link标签
<link rel="P3Pv1" href="/w3c/p3p.xml"></link>
分享到:
相关推荐
P3P P3P是一種被稱為個人隱私安全平臺項目(the ... 當頁面存在iframe時,想要獲取iframe框架裏面的cookie,就要在iframe相應的動態頁面裏面添加P3P Header信息,否則在IE下獲取不到。因為IE有安全策略,限制頁面不
最近做的合作网站嵌入到对方的iframe中去,在safari,opera和有些版本的搜狗浏览器(内核版本原因)中不能读到cookie。
演示DEMO 博文链接:https://xiaoa7.iteye.com/blog/312295
框架完美解决了iframe之间的跨域通讯。底层技术采用window.name转换代理实现
IFrame中Session丢失的解决办法
何为跨域跨域session/cookie? 也就是第三方session/cookie。...我的问题 在开发讯息在线产品(http://iap.pgia.net)测试各种浏览器的兼容性时,发现IE浏览器(v7\8)都无法登录(总是提示验证码不匹配
有别于JS跨域、IFRAME跨域等的常用处理办法,还可以利用P3P来实现跨域。P3P是什么P3P(Platform for Privacy Preferences)是W3C公布的一项隐私保护推荐标准,以为用户提供隐私保护。 P3P标准的构想是:Web 站点的...
这是关于iframe使用过程中出现的问题整理的解决方法,关于使用iframe不用单独写接口打通数据,直接把数据通过ifarme嵌套方法传递过去,使用简单方便。
iframe 跨域访问session问题解决方法
iframe跨域问题:Uncaught DOMException Blocked a frame with origin解决方法
MFC ie webbrowser对网页控件的选中、设值、延时以及iframe框架下控件的寻找
Rails:通过 P3P 标头在 IE 的 IFrame 中启用 cookie。 已弃用/未维护 改用这样的东西: class AllowCookiesInIframesMiddleware def initialize ( app ) @app = app end def call ( env ) response , ...
解决下拉菜单被iframe遮住问题吗,
解决IE,Firefox,chrome,safari浏览器中iframe显示高度自适应问题
本篇文章小编将为大家介绍,关于Iframe如何跨域访问Cookie和Session的解决方法,有需要的朋友可以参考一下
【IE6以下】 iframe边框通过css设定在FF下...【IE7\IE8下】 遇到一个郁闷的问题,ie8,ie7 iframe 的边框无法去除,试过用脚本和样式添加frameBorder,border 等属性都无法去除。 iframe append到页面之前设置是有效的
IFrame对象占用的内存资源在窗体关闭后不会释放。弹出关闭反复多次后,IE浏览器内存占用可超过数百M,严重时IE浏览器报错