参考;http://www.lovelucy.info/ie-accept-third-party-cookie.html

前两天帮同事处理一个 js 跨域问题,使用 jsonp 跨域提交用户名密码请求,实现自动登录第三方网站,即 SSO(single-sign-on) 单点登录,一处登录处处登录。在 Chrome 下没问题,IE 却不行。查看 HTTP 的几个来回,发现登录请求是成功的,问题出在第三方网站返回的 cookie (session id) IE 并没有接受,下一次发送请求时根本没有带上 cookie,说明之前的 Set-Cookie 指令没有效果,所以怎么也登录不了。查了一下,有人使用 iframe 内嵌网页的形式,也遇到了 IE 下不能设置 cookie 的情况。

如果在“Internet选项”中把“隐私”级别设置为低,或者把第三方域名列入“可信站点”就没问题了。但是我们不可能让每个用户去更改 IE 设定吧?这是一个很常遇到的场景,肯定有别的解决办法。

浏览器的第三方 cookie 限制
所谓第三方 cookie,就是说你访问网页 A,却接收到域名 B 的 cookie 设定指令。这可能是由于网页 A 请求或链接了 B 的网页,比如上面提到的 iframe 以及 jsonp。

我查到了各个浏览器对于跨域的处理规则,可以看到第三方 cookie ,IE 在默认设置中是做了限制的。

不同浏览器的第三方 cookie 规则
IE FIREFOX CHROME SAFARI OPERA
限制第三方coookie 是 否 否 是 否
要解决这个问题,有 2 种方法,一个就是上面说到的调整 IE 设置,将第三方域名加入到可信网站列表中;另一个方法,就是 P3P 了。

P3P?
P3P 全称 Platform for Privacy Preferences,隐私设定平台规范。这个规范极其复杂,若要讲清楚,天都黑了一半。简言之,就是网站向浏览器声明自己的隐私政策,比如网站是否搜集访问者的个人信息,设置 cookie 的用途等等。浏览器会依据设置,决定在第三方请求的条件下是否接受网站的 cookie。

完整地部署 P3P 包括设立隐私政策文件(policy.html)、原则档(policy.xml)、参考档(p3p.xml),有兴趣详细了解的可以参考 MSDN 中关于部署 P3P 的文章。

这搞得太复杂了,我只是想在公司内部做各个管理系统的单点登录而已。好在还是有比较简单的方法的,就是发送 P3P 相关的 HTTP header。

ASP.NET:

HttpContext.Current.Response.AddHeader("p3p", "CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");
PHP:

header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');
JSP:

response.setHeader("P3P","CP='IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT'");
好吧,这些 IDC DSP 什么的是啥意思啊?

这些标签就是 P3P 所规定的了,例如 NOI 表示不搜集可识别用户的资料,ADM 表示信息搜集会用于网站管理……查看完整清单,中文简要清单。

浏览器会根据这些标签决定是否接受 cookie,根据测试结果,加上 NOI 最省事,一个就够了。不过网站一般很难做到 NOI,除非永远匿名,“登录”功能可能就违背了NOI。理论上讲,标签应该真实地反映网站的信息搜集行为,若声明的隐私政策与实际行为不符,是会要负法律责任的。Stackoverflow 有篇讨论提出了法律相关议题,可以参考。

除了传送 P3P http header,还可以通过 HTML meta 标签,或者 设定 IIS 服务器 来声明 P3P。

参考链接:
http://blog.darkthread.net/post-2011-10-27-p3p-header-and-iframe-session.aspx

使用 P3P 规范让 IE 跨域接受第三方 cookie相关推荐

  1. 通过 P3P规范让IE跨域接受第三方cookie session

    所谓第三方 cookie,就是说你访问网页 A,却接收到域名 B 的 cookie 设定指令.这可能是由于网页 A 请求或链接了 B 的网页,比如上面提到的 iframe 以及 jsonp. 我查到了 ...

  2. php domain cookie cross-domian,跨域(cross-domain)访问 cookie (读取和设置)

    Passport 一方面意味着用一个帐号可以在不同服务里登录,另一方面就是在一个服务里面登录后可以无障碍的漫游到其他服务里面去.坦白说,目前 sohu passport 在这一点实现的很烂(不过俺的工 ...

  3. 跨域(cross-domain)访问 cookie (读取和设置)

    跨域(cross-domain)访问 cookie (读取和设置) Passport 一方面意味着用一个帐号可以在不同服务里登录,另一方面就是在一个服务里面登录后可以无障碍的漫游到其他服务里面去.坦白 ...

  4. 转载 - 通过设置P3P头来实现跨域访问COOKIE

    作者:老王 网上看了别人介绍的一片文章,说使用P3P可以完成跨域COOKIE操作,感觉很COOL,不过没有提供源代码,我胡乱写了一下,大家看看. 实际工作中,类似这样的要求很多,比如说,我们有两个域名 ...

  5. PHP 通过设置P3P头来实现跨域访问COOKIE

    我的是CentOS的系统(Linux 内核) 编辑HOST vi /etc/hosts 加入 127.0.0.1        www.a.com 127.0.0.1        www.b.com ...

  6. CP=CAO PSA OUR 用P3P header解决iframe跨域访问cookie

    短信模块以iframe方式嵌入系统,系统登录时,短信登录失败,这种情况只在win7下IE出现,win10未出现. 原因:IE禁止iframe跨域访问cookie 解决方案: 在短信登录时,进行如下设置 ...

  7. QQ登录IE下iframe跨域session和cookie失效问题的解决方案

    情景:webQQ登录,使用的是跨站点iframe弹窗登录,发现只有在IE浏览器下,登录存储session不起作用,一刷新页面就登出 分析:IE限制第三方session/cookie 随着IE版本的不断 ...

  8. webapi+ajax跨域问题及cookie设置

    最近小玩了点东西,发现简单的东西总能遇到点问题 1.webapi跨域设置 [EnableCors(origins: "*", headers: "*", met ...

  9. 【JS】跨域问题读写cookie的解决办法

    场景描述: 跨域Cookie共享:访问A站点时已经登录从而保存姓名.头像等基本信息,这时访问该公司的B站点时就自然而然的能显示出这些基本信息,也就是实现信息共享(在银联体系中A银行办理的卡也能在B银行 ...

最新文章

  1. html5制作交互式课件,用flash制作交互式课件.ppt
  2. python爬虫案例讲解-Python爬虫案例集合
  3. 永洪科技携手华为构建金融智慧运营与商业智能方案,解决金融敏捷分析难题
  4. leetcode 617. Merge Two Binary Trees | 617. 合并二叉树(Java)
  5. WordPress get_allowed_mime_types函数(wp-includes/functions.php)存在跨站脚本漏洞
  6. 嵌入式Linux系统编程学习之十七计时器与信号
  7. 这届互联网公司月饼:阿里卡哇伊,百度酷炫风,京东乾隆审美……
  8. oracle客户端ora 12541,Oracle 11g 64bit下程序报ORA-12541: TNS: 无监听程序解决办法
  9. 力扣-88 合并两个有序数组
  10. 《Attention-based LSTM for Aspect-level Sentiment Classification》阅读笔记
  11. 多人在线答题游戏 小程序 (规划设计方案)
  12. PHP 微信小程序支付实现
  13. spss选择主要特征_SPSS统计作图教程:一维箱线图
  14. exe文件打不开应该怎么办?
  15. 阿里云送你Hands-on Labs X linux联名T恤——阿里云高校计划《Linux命令入门》训练营
  16. List集合分页操作
  17. Android 最常用的设计模式九 安卓源码分析—— 适配器模式(Adapter)
  18. 诊断实验评估指标-灵敏度(sensitivity)特异度(specificity)准确度(accuracy)
  19. 以太坊Ghost协议
  20. Conclusion for Inheritance and Object Oriented Design

热门文章

  1. MSSQL2000+asp.net+论坛安装过程
  2. IhttpHandler
  3. MacBook Pro Homebrew 国内镜像加速
  4. NR 5G 安全与秘钥简述
  5. Processing 状态量控制动画技巧
  6. asp mvc @Html.CheckBox(sel,true) 往后台传值问题
  7. 数值优化(Numerical Optimization)学习系列-文件夹
  8. 《JavaScript高级程序设计》节点层次和DOM操作技术
  9. request.getServletPath()和request.getPathInfo()用法
  10. 解决 DNS general: warning: *** POKED TIMER ***