`

p3p iframe session共享及其它

阅读更多

IE浏览器iframe跨域丢失Session问题

在开发中,我们经常会遇到使用Frame来工作,而且有时是为了跟其他网站集成,应用到多域的情况下,而Iframe是不能保存Session的因此,网上可以找到很多相关的文章,如果网站可以采用设置Web.Config中的配置: mode="StateServer"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="40"
/>
把cookieless="false"改成"true"就可以了但也同样有个小问题,就是如果页面中采用Javascript的window.location.href=''这样的方式来重定向的话,系统会认为这是另一个新的请求,产生一个新的SessionId,导致原Session同样的丢失所以对于重定向,还是使用Response.Redirect()为好

除了Ifrmae有丢Session问题外,frameset也有同样的问题Frameset的问题更不确定,是有时会丢,有时不会丢,这更认人头痛,在网上找到了一个方法,在页面page_onload里添加一语句:
Response.AddHeader("P3P","CP=CAO PSA OUR");
FrameSet中的Session丢失问题就解决了至于里面具体的原因 也没时间去搞懂了


最简单的方法就是在iis里设置

 

解决办法

response.addHeader("P3P","CP=CAO PSA OUR")。

不过难道我们需要在每个页面都加这个么?

不需要的

如果有权配置IIS服务器

打开IIS


管理工具——〉选择一个网站——〉属性——〉http头,增加一个http头
然后输入头名:P3P
输入头内容:CP=CAO PSA OUR

如果没有权限配置IIS服务器,但是你用的是asp.net的话

可以用httpmodual来实现在全部页面或者部分页面头部插入所需要的标志

本站点的某个目录就是这样实现的

 

2、用P3P header解决iframe跨域访问cookie

本文来源:http://blog.csdn.net/wonder4/archive/2008/02/27/2125804.aspx


目前在整合几个应用时,遇到了iframe无法获取cookie(session)的问题,经过google,终于把这个问题解决了,现在记录一下。
   我的需求是这样的。
   有一个应用是用.net开发的,主要是控制用户登录,用户访问权限的,部署在上海机房。现在就叫A应用吧
   还有一个应用是用java开发,主要是具体业务的操作。部署在北京机房,这里叫B应用吧
   由于已经有一个用户管理和权限的应用程序,所以java 开发的这个B应用就没有开发用户权限的功能,想直接使用.net的A程序。

用户访问的流程是这样的:
    1.用户先在A处登录,A设自己的cookie,在A的菜单里有去B应用的链接
    2.当用户点去B应用的链接时,A在链接上自动加上这个用户的token,传给B系统
  3.当B系统接收到请求后,把这个用户的token信息设成自己系统的cookie,(B系统里有表单post操作,如果不设cookie,session,那么每个请求不管GET还是POST都要明确带着该用户的token信息,对于系统的改造量比较大,另外以后换权限验证方法改动也比较大。)
  4.用户在B系统里的每次操作都没有明码带用户的token,所以每次都要去cookie得到token信息,然后发送一个http请求去A,让A系统验证这个用户是否有权限访问。
    5.如果A系统的接口返回可以访问的状态报告,那么B继续执行;如果A系统指示没有权限访问,那么B系统提示访问受控警告信息。

  一切开发都完成,到整合上线时,发现这个流程走不通,百思不得其解,想了半天也不知道 怎么 回事,google了半天,才发现原来是ie在捣鬼,IE不允许跨域访问cookie(好象firefox没问题,ie自6.0以后改用w3c组织的P3P协议了),再看看我的应用,在第二步设的cookie,在第三步以后所有B应用的访问请求,ie都把B应用的cookie blocked掉了(因为用户的访问是从A应用发起,从A应用访问B应用的东东,算跨域访问,IE认为有安全问题)。。。。(IE状态栏有一个红眼睛的button,点开可以看到哪些cookie给blocked掉了)

     知道原因就好办了,再google知道可以用P3P header可以解决问题!
     下面是java的解决办法之一,也是我的解决办法,不过个方法不太好:
     直接往响应里加一个P3P的header
     response().addHeader("P3P", "CP=\"IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA\"");

其中CP=“XXX XXXX”这些是有具体含义的:
     CP就是compact policies的意思,
    另外header的值也可以是policyref="http://myhost/P3P/PolicyReferences.xml",就是指定一个策略文件。

具体请看这里.

下面是摘抄的一段Compact Policies的具体取值范围和设值含义。
 Compact Policies
Compact policies are essentially summaries of P3P policies. They can be used by user agents to quickly get approximate information about P3P policies, therefore improving performance.

For an in-depth explanation of compact policies, we refer to the P3P1.0[4] specification. Here, we limit to stating the syntax:

compact-policy-field  = `CP="` compact-policy `"`

compact-policy        = compact-token *(" " compact-token)

compact-token         =  compact-access           |

                                 compact-disputes         |

                                   compact-remedies         |

                      compact-non-identifiable |

                       compact-purpose          |

                         compact-recipient        |

                       compact-retention        |

                       compact-categories       |

                        compact-test compact-access        = "NOI" | "ALL" | "CAO" | "IDC" | "OTI" | "NON"

                        compact-disputes      = "DSP"

                        compact-remedies      = "COR" | "MON" | "LAW"

                        compact-non-identifiable = "NID"

                        compact-purpose       = "CUR"        | "ADM" [creq] | "DEV" [creq] | "TAI" [creq] |

                         "PSA" [creq] | "PSD" [creq] | "IVA" [creq] | "IVD" [creq] |

                         "CON" [creq] | "HIS" [creq] | "TEL" [creq] | "OTP" [creq]                       

                           creq                  = "a" | "i" | "o"

                        compact-recipient     = "OUR" | "DEL" [creq] | "SAM" [creq] | "UNR" [creq] |

                                                             "PUB" [creq] | "OTR" [creq]

                        compact-retention     = "NOR" | "STP" | "LEG" | "BUS" | "IND"

                        compact-category      = "PHY" | "ONL" | "UNI" | "PUR" | "FIN" | "COM" |

                                                            "NAV" | "INT" | "DEM" | "CNT" | "STA" | "POL" |

                                                             "HEA" | "PRE" | "LOC" | "GOV" | "OTC"

                        compact-test          = "TST"

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wonder4/archive/2008/02/27/2125804.aspx

"TST"另外这里还有一个P3P的验证工具:http://www.w3.org/P3P/validator.html,可以验证一下自己设置的P3P是否正确。这里还有一个老外写的不错的blog,也可以参考一下。http://www.sitepoint.com/article/p3p-cookies-ie6/2
------------------------------------------------------------------------------------------------------------------------------------------------------
用 P3P 实现隐私参数优选策略
时间:2009-01-01 19:25:05  来源:  作者:
偶尔在yahoo的 头信息里看到p3p就上网查了一下 放在这里储存
<?php
print_r(get_headers());
?>
结果是这样的
Array
(
     [0] => HTTP/1.1 301 Moved Permanently
     [1] => Date: Mon, 17 Sep 2007 05:33:26 GMT
     [2] => Location: http://cn.yahoo.com/
     [3] => Connection: close
     [4] => Content-Type: text/html
     [5] => HTTP/1.1 200 OK
     [6] => Date: Mon, 17 Sep 2007 05:33:26 GMT
     [7] => P3P: policyref=”http://p3p.yahoo.com/w3c/p3p.xml“, CP=”CAO DSP COR CU
R ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND
PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV”
     [8] => Connection: close
     [9] => Content-Type: text/html
)


下面为转载

作者: BUILDER.COM
Monday, May 20 2002 11:02 AM

 

Platform for Privacy Preferences(P3P,中文称隐私参数优选平台)是一种为网站说明隐私和/或用户信息策略的XML标准。采用P3P之后网站属主即可描述其网站所收集的信息内容及其用途,在没有实现P3P的情况下,有些用户在提交表单或者用cookie浏览网站时就只得把自己的安全选项设置为较低级别。而采用P3P就可以通过建立代理(agent)的方式来代表用户参与网络活动。本文就是对P3P的基本概述。

经W3C宣布的P3P的5个目标如下:
收集网站数据的标准纲要,也就是所谓的P3P Base Data Schema
用途、收件人、数据类别以及其他涉及隐私暴露方面的标准集合
表达隐私策略的XML格式
把隐私策略关联网页、网站和cookie的方式
通过HTTP传输P3P策略的机制

--------------------------------------------------------------------------------

P3P的实现
P3P的功能有三个部分组成:一个或者多个策略文件、策略参考文件和源自服务器的HTTP报头。策略文件应该存放在Web服务器的w3c目录下(/w3c)。

你不妨对你的网站计划和评估一下现有的隐私策略。如果没有这样的计划或者策略,那么在实现P3P之前你就应该制定相应的计划。隐私策略示例请见Sun网站。现在先让我们了解实现P3P的基本步骤。

1. 创建策略文件(Policy.p3p)
首先你必须创建一个策略文件。XML策略文件准确描述了信息的内容及其用途。记住,P3P采用了“只有得到承认的才是许可的”防范机制,这就是说,只有这个策略文件中描述过的数据才需要采集。P3P规范并没有说明怎样的数据及其处理过程不在包含范围之内。这样策略文件就会包含大量信息,好在IBM的P3P策略编辑器在你创建这类文件的时候可以帮上大忙。

策略文件至少包含了关于网站的声明语句。该语句的内容是采集何种数据以及如何使用它们的信息。清单A即是实现自己策略的示例。

采集的数据遵循P3P Base Data Schema规定的数据结构。假如实现了多个声明,那么各个声明的目的和数据列表是不同的(也许某个网站需要针对cookie、注册和购物采用不同的声明)。IBM的P3P策略编辑器并没有包含不被采集的特殊数据字段,不过,按照W3C提案的规定,我建议你包括网站采集到的特殊数据(比方说:“用户家庭住址”)。此外文件中最好还要包括Save Zone声明,Save Zone是网站上同具体用户无关的信息组成部分。

2. 创建策略参考文件(Policy.xml)
编写策略文件之后就必须接着创建策略参考文件了。不同的网站目录采取不同的隐私策略是完全可能的。可是,大多数网站通常会在整个网站范围内再适用单一的策略。创建策略参考文件就是这个过程中最简单一步,可是你得保证P3P策略文件的URL和策略名称(#generalPolicy)写对了。文件中包含的元素只是策略适用目录的路径。清单B中的策略参考示例则包含了根目录下的全部路径。

3. 配置服务器
实际上,要真正开始用到P3P你还得先配置你的服务器传递一个指向策略参考文件的HTTP报头。系统配置根据市售各类服务器的差别而不同。如果你不具备访问服务器的权限,那么你可能得使用<link>标签或编写相应的代码。

在下面的例子里,P3P是HTTP报头的名字。冒号以后的所有内容就是报头的值,它分成两个部分:指向策略参考的URL和简洁策略CP(Compact Policy)。
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浏览器也会检查策略文件并且令策略文件无效。

如果你使用的共享服务器或者Web服务器难以配置HTTP报头,那么你不妨将其添加到你的 HTML或Java代码中。我就在自己的JSP文件中添加了下列代码:

response.setHeader(”P3P”,”policyref=\”http://www.mysite.com/w3c/p3p.xml\” CP=\”ALL DSP COR CUR OUR IND PUR\”");

如果你的站点是基于HTML的,那么你也可以使用 <link> 标签:
<link rel=”P3Pv1″ href=”/w3c/p3p.xml”></link>

检查和测试
IBM的P3P编辑器可以对你的P3P文件而整个隐私系统的实现进行检查。幸好,W3C在网上推出了一种检查工具。你不妨输入自己主页的URL看看检查工具是如何工作的。它会说明你的P3P实现中存在的语法或配置错误。此外,你也可以IE 6.0的菜单中选择View–> Privacy Report,列出全部站点,然后选择你的网站并单击Summary按纽查看你的隐私报告。

小结
最后,策略参考文件(P3P.xml)和策略文件(Policy.p3p)都被创建出来了。Policy.p3p文件是完整策略;它被P3P.xml(或 Policy.xml)引用,这个可以通过查看HTTP报头认识到这一点。W3C强烈建议你在Web服务器上把这些文件存放在一个/w3c目录下。如果每个人都在用着同一目录,那么,就算HTTP报头没被收到,用户代理也能找到这些文件。
 

分享到:
评论

相关推荐

    iframe 跨域访问session

    然而,当涉及到跨域时,`iframe` 遇到的问题之一就是无法正常访问父页面或被嵌入页面的`session`。这是因为浏览器的同源策略(Same-Origin Policy)限制了不同源之间的交互,包括`session`和`cookie`。 同源策略是...

    IFrame中Session丢失的解决办法

    这种结构可能导致Session信息在IFrame与其父窗口或同一页面中的其他IFrame之间无法正确共享或识别。 ### Session丢失的原因 Session丢失在IFrame环境中的主要原因是浏览器的同源策略和Cookie管理机制。同源策略...

    iframe跨域与session失效问题的解决办法

    通过这种方式,可以解决在IE浏览器中由于P3P隐私设置导致的iframe跨域cookie丢失问题,进而解决session失效导致的用户频繁重新登录的问题。这个方法在技术上是可行的,但需要网站管理员操作,确保P3P声明符合实际的...

    【ASP.NET编程知识】iframe跨域与session失效问题的解决办法.docx

    在 ASP.NET 开发中,跨域和 Session 失效问题是一个常见的问题,但通过添加“P3P”协议和使用 HttpContext.Current.Session,我们可以解决这个问题,从而确保应用程序的正常运行。 相关知识点: * 跨域和 Session ...

    P3P的几篇论文参考

    P3P通过提供一种机器可读的语言,使得浏览器能够自动理解网站的隐私政策,并据此作出是否共享数据的决定。 在"**P3P问题的多解现象的概率研究**"这篇论文中,作者探讨了P3P问题在实际应用中可能出现的多解情况。P3P...

    P3P Header解决Cookie跨域的问题

    P3P  P3P是一種被稱為個人隱私安全平臺項目(the ... 當頁面存在iframe時,想要獲取iframe框架裏面的cookie,就要在iframe相應的動態頁面裏面添加P3P Header信息,否則在IE下獲取不到。因為IE有安全策略,限制頁面不

    PHP关于IE下的iframe跨域导致session丢失问题解决方法

    通过设置P3P头,可以通知浏览器允许iframe内的页面使用和共享Session,从而修复登录和其他依赖Session的功能。在开发过程中,对于兼容性问题,尤其是浏览器的差异性,需要进行充分的测试和调试,确保在多种环境下都...

    P3P算法整理1

    P3P算法整理 P3P算法是计算机视觉中的一种基础算法,用于解决 Perspective-Three-Point 问题,也即PnP问题的特殊情况。在P3P算法中,使用已知的3个参考点间的几何关系,应用余弦定理列写方程组,之后对方程组进行...

    Session跨域共享demo

    跨域Session共享虽然方便,但也会增加安全风险,因为Session信息可能会被其他域获取。因此,确保只在可信的子域之间共享Session,并且在敏感操作中谨慎处理Session数据,防止会话劫持和跨站请求伪造攻击。 总之,...

    P3P4实验室基本要求

    P3P4实验室基本要求.介绍了P3P4实验室的相关设计及基本要求。

    关于Iframe如何跨域访问Cookie和Session的解决方法

    总结来说,解决Iframe跨域访问Cookie和Session的关键在于理解和利用浏览器的特性,如P3P协议,以及巧妙地调整代码结构。同时,对于Session的管理,要意识到它与Cookie之间的关联性。在多系统集成的场景下,这些技巧...

    IBM P3P Policy Editor

    P3P策略是网站公开其数据处理方式的XML格式文件,它包含了一系列关于网站数据收集、使用、共享和保护的声明。IBM P3P Policy Editor为开发者提供了一个用户友好的界面,让他们可以方便地构建这些策略,确保网站符合...

    关于session丢失问题

    以下将详细探讨Session丢失的可能原因及解决策略。 1. **Session超时**:服务器默认设置了一个Session的生命周期,比如30分钟无操作后自动销毁。如果用户在这个时间内没有进行任何交互,Session就会过期,从而丢失...

    处理session跨域几种方案

    处理Session跨域问题通常涉及到多个网站或应用之间共享用户身份验证信息。Session是Web应用程序用来存储用户特定数据的一种机制,通常存储在服务器端,而Session ID通过Cookie在客户端与服务器之间传递。当用户在...

    6P3P单端A类电子管功放的制作

    ### 6P3P单端A类电子管功放的制作 #### 一、引言 对于初涉电子领域的爱好者来说,单端A类电子管功放因其结构简单、音色出色而备受青睐。此类功放不仅易于制作,还能提供优质的音频体验。本文将详细介绍一种基于6N3...

    P3P 简介

    隐私偏好设定平台(Platform for Privacy Preference,P3P)方案通过为隐私策 略提供一个标准的可机读格式

    iframe跨域嵌套自适应高度

    ### iframe跨域嵌套自适应高度 在网页开发过程中,`...正确地配置CORS、合理地利用postMessage API以及理解P3P头的作用,可以帮助开发者有效解决`iframe`跨域嵌套中遇到的问题,实现更加灵活和安全的Web应用开发。

Global site tag (gtag.js) - Google Analytics