• 用P3P header解决IE下iframe跨域访问时候session丢失的问题


    用P3P header解决IE下iframe跨域访问时候session丢失的问题

    整合客户的登录时,或者其他一个网站通过iframe时,特别是一个http页面,访问一个https页面时,常常会session失效!

    E6/IE7支持的P3P(Platform for Privacy Preferences Project (P3P) specification)协议默认阻止第三方无隐私安全声明的cookie,Firefox目前还不支持P3P安全特性,firefox中自然也不存 在此问题了。

    在frameset里面,也就是里面的frame是来自第三方站点(不同IP或 不同域名),那么默认情况下IE会自动禁用这些站点的cookie,也就是在请求某url时在HTTP header里不发送它们的cookie,包括session的cookie。注意,这些站点在response里面设置的cookie还是会被发送到浏 览器的。

    在用户浏览a.php时 A.com写入的为第一方Cookie,其嵌入的iframe指向b.php.这时B.com写入的就为第三方Cookie了,所以它是被IE当在了大门外。 所以,每次当用户提交的cookie提交时,就挂掉了.因为传不到真实的服务器.

    解决方案:
    只需要设置 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="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');


    ASP.NET的话 
    通过在代码上加Response.AddHeader("P3P", "CP=CAO PSA OUR")或者在Window服务中将ASP.NET State Service 启动。

    JSP: 
    response.setHeader("P3P","CP=CAO PSA OUR")

    如果这篇文章对您有帮助,您可以打赏我

    技术交流QQ群:15129679

  • 相关阅读:
    元素的offset,scroll,client之间的区别和联系
    一道面试题--面向对象
    前端三大主流框架
    局部变量和成员变量
    【BZOJ1179】[Apio2009]Atm/抢掠计划
    【POJ1195】Mobile phones
    退役狗的日常
    【BZOJ1088】扫雷
    【BZOJ1717】&&【POJ3261】[Usaco2006 Dec]Milk Patterns 产奶的模式
    【BZOJ1342】Sound静音问题
  • 原文地址:https://www.cnblogs.com/yeminglong/p/2493726.html
Copyright © 2020-2023  润新知