IE iframe cookie问题(p3p)

前段时间碰到一个问题,就是在IE下,使用iFrame嵌入页面时,该页面的会话级别的cookie无法写入,导致服务端始终无法获取JSESSIONID,每次都是产生一个新的,使得Session无法使用。

当时发生问题的时候是自进行CAS登陆框嵌入,现象就是CAS的lt不更新,一开始以为是iFrame缓存的原因,经过细心的排查发现并不是,然后将想到跨域问题,经过排查发现也不是,甚至怀疑到spring产生lt值得机制存在问题,最终发现是Session无法正确获取,每次都会产生新的 Session,经过一番Google,找到解决方案。

只需要设置 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

三、相关技术文章

  1. 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
  2. The Platform for
    Privacy Preferences 1.0 Deployment Guide
  3. 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>

     
     

IE iframe cookie问题(p3p)的更多相关文章

  1. Session失效之 IE iframe cookie问题(p3p)

    项目中,在做门户系统时,使用了iframe嵌套展示各个子系统的页面,其中有个页面在ie8下,始终无法正常登陆. 后来项目经理分析,应该是iframe跨域导致,赶忙查看了连接地址,还真是一个跨域的页面. ...

  2. Ipad Safari iframe cookie 当浏览器默认禁用第三方COOKIE

    前一阵子,我们发现高版本的Safari中默认会阻止第三方cookie,如下图所示. 问题 什么是第三方cookie呢?在访问一个网站A时,网站A算作第一方,如果网站A中引用了另一个网站X(网站X的域名 ...

  3. 通过P3P头实现跨域设置cookie

    PHP的setcookie函数可以设置域,但是只能在当前域内,如果出现多域可由如下办法处理:实现原理:www.b.com/set_cookie.php   在b域名下设置a域名的cookie < ...

  4. 解决Safari高版本浏览器中默认禁用第三方COOKIE(含demo)

    前段时间在项目里遇到了一个比较头疼的问题,就是高版本的Safari中默认会阻止第三方cookie,这使得使用Safari浏览器的用户无法按照正常的业务逻辑进行操作. 问题展现 知识点 什么是第三方co ...

  5. Cookie安全小结

    Cookie机制:一般来说,同域内浏览器中发出的任何一个请求都会带上Cookie,无论请求什么资源,请求时,Cookie出现在请求头的Cookie字段中.服务端响应头的Set-Cookie字段可以添加 ...

  6. A Quick Look at P3P

    P3P Made Simple By default, IE will reject cookies coming from 3rd-party contexts. A 3rd-party conte ...

  7. Web前端学习第三天(cookie 二)

    HttpOniy Cookie机制 在http层面传输cookie,当设置HttpOnly标志后,客户端脚本就无法读写该cookie.可以用此防止xss攻击获取cookie <?php setc ...

  8. Cookie提要

    Cookie的基本概念和设置  Cookie在远程浏览器端存储数据并以此跟踪和识别用户的机制.从实现上说,Cookie是存储在客户端上的小段数据,浏览器(即客户端)通过HTTP协议和服务器端进行Coo ...

  9. 完全跨站点跨域名单点(SSO)同步登录和注销

    先来说说什么是单点登录(SSO).来自百科的介绍:SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主 ...

随机推荐

  1. android动画介绍之 自己定义Animation动画实现qq抖一抖效果

    昨天我们介绍了Animation的基本使用方法.小伙伴们了解的怎么样了?假设还没有了解过Animation的小伙伴能够看看这篇博客 android动画介绍--Animation 实现loading动画 ...

  2. UVa 10170 - The Hotel with Infinite Rooms

    题目:求从s開始的递增序列(每次加1).求出他们加和不小于D的那个最后的加数. 分析:数学题.分治.s + s+1 + ... + n = n*(n+1)/2 - s*(s-1)/2 = (n+s)* ...

  3. Python的招牌菜xmlrpc

    一.简单介绍 为了解决在系统的80port提供RPC的服务.而又不影响正在运行的WEB服务.人们想出了用HTTP协议传输RPC包的办法.对于差点儿是专门用于传输文本的HTTP协议.要在其上传输RPC封 ...

  4. 查看SQL Server当前会话的隔离级别

    查看SQL Server当前会话的隔离级别 DBCC USEROPTIONS

  5. IEEE1588 verision2 报文介绍

    PTP报文 PTP verision2报文是由 报头,主体 和 报尾 (header, body, and suffix)组成,报尾长度可能为0. PTP verision2报文在verision1的 ...

  6. Oracle数据库(三)表操作,连接查询,分页

    复制表 --复制表 create table new_table as select * from Product --复制表结构不要数据 在where后面跟一个不成立的条件,就会仅复制表的结构而不复 ...

  7. 串String(2):串的实现(堆分配存储表示法)

    7/27/2017,先占个位,最近事情比较忙,明天敲一波代码,预测在一星期内搞定 9/02/2017,看到这个十分汗颜,八月去美帝学习了,没有抽空补上这一博文,计划这个月开了数据结构课后补上

  8. Java并发编程之ThreadLocal源码分析

    ## 1 一句话概括ThreadLocal<font face="微软雅黑" size=4>  什么是ThreadLocal?顾名思义:线程本地变量,它为每个使用该对象 ...

  9. ArcGIS API for JavaScript 中的数据类型【vs】GPServer的数据类型

    熟悉GPServer的同学肯定知道,GPServer在10.1的ArcMap后需要执行成功一次才能发布. 发布GPServer,可以是ArcMap的工具箱的工具,也可以是自己写的模型. 不管是ArcM ...

  10. 工厂方法模式(Method Factory),理解多态应用的好例子.

    工厂方法模式又称为多态性工厂,个人认为多态性工厂更能准确的表达这个模式的用处.与简单工厂(静态工厂)相比较,这里的多态性是指抽象出一个工厂基类,将因为一个产品有N种不同的是现这种变化封装起来,将具体的 ...