注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

88AVI-WEBZONE8-天空网

是金子总要发光的,但是当满地都是金子的时候,我自己也不知道自己是哪颗了

 
 
 

日志

 
 
关于我

两个人交谈,一个人可以洗耳恭听。但是,三个人则无法互谈这人世最严肃而应深究的事。 我们应该注意自己不用语言去伤害别的同志,但是,当别人用语言来伤害自己的时候,也应该受得起。 要对别人隐瞒我们知识的局限,最可靠的方法就是不要越过那界限。 不登高山,不知天之高也,不临深溪,不知地之厚也。 不飞则已,一飞冲天,不鸣则已,一鸣惊人!!!!!

网易考拉推荐

用P3P header解决iframe跨域访问cookie/session  

2008-03-31 17:59:33|  分类: php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

目前在整合几个应用时,遇到了iframe无法获取cookie(session)的问题

   我的需求是这样的。

   有一个应用是用php开发的,主要是控制用户登录,用户访问权限的,部署在上海机房。现在就叫A应用吧

   还有一个应用是用jsp开发,主要是具体业务的操作。部署在北京机房,这里叫B应用吧

   由于已经有一个用户管理和权限的应用程序,所以jsp 开发的这个B应用就没有开发用户权限的功能,想直接使用php的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系统提示访问受控警告信息。

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

     下面是jsp的解决办法之一:

     直接往响应里加一个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",就是指定一个策略文件。
下面是php的解决办法之一:
在头部分加入
header("p3p: cP=ALL DSP cOR PSAa PSDa OUR NOR ONL UNI cOM NAV");

  评论这张
 
阅读(732)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017