V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
eastpiger
V2EX  ›  问与答

P3P 这种跨域技术现在的情况如何?为何感觉并不是很流行……

  •  
  •   eastpiger · 2016-02-02 20:36:43 +08:00 · 3599 次点击
    这是一个创建于 3224 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近想造个 SSO 的轮子,查 UCenter 的代码的时候发现他们在实现同步登陆的技术上,应用了 P3P 这个技术实现跨域 cookie 。查了一下发现这个技术据说很吊的样子,但是也发现似乎最近提到的非常少啊……这个技术最近的情况是什么样子的。有没有哪位给普及下……是有什么缺陷么?

    9 条回复    2016-02-03 11:20:25 +08:00
    explon
        1
    explon  
       2016-02-03 00:38:17 +08:00 via iPhone
    因为用 JS 调用的解决方式还是兼容性更好
    explon
        2
    explon  
       2016-02-03 00:39:10 +08:00 via iPhone
    补充 JS 调用: Script 标签载入跨域 Cookie
    Vi
        3
    Vi  
       2016-02-03 02:45:03 +08:00
    因为这是 ms 的。。
    emric
        4
    emric  
       2016-02-03 03:35:42 +08:00
    P3P 不是跨域技术,而是 IE 浏览器隐私设置中的一个协议,相当于严格版本 “禁止跟踪”。
    不通过 P3P 申报网站的私隐政策,就不允许跨域设置 Cookie 。
    tabris17
        5
    tabris17  
       2016-02-03 07:47:01 +08:00 via iPhone
    ie 私有的,兼容性不行
    jugelizi
        6
    jugelizi  
       2016-02-03 09:04:19 +08:00
    p3p 是为了兼容 ie 的
    现代浏览器用 cors
    cszchen
        7
    cszchen  
       2016-02-03 09:13:47 +08:00
    UCenter 同步登陆的技术用 js 轮询实现的吧?
    比不上 auth2.0 的方式
    andy12530
        8
    andy12530  
       2016-02-03 11:17:29 +08:00   ❤️ 1
    p3p 就是为解决 cookie 携带问题的。
    现在场景如下:客户网站为 a.com ,投放代码 b.com/b.js ,展现<iframe src="b.com/b.html"></iframe>广告。需要在展现广告时,由 b 域下面的请求,给 b 域种上对应 cookie 以做统计追踪等。

    前提:
    客户访问 a.com 前,从未访问过 b.com ,即 b.com 下 cookie 是空的。
    问题:
    1 、 b.html 在 header 上附上 cookie 能写入进去吗?
    2 、 b.html 页面里的 ajax 或者 json 请求的 header 上附上 cookie ,能写入进去吗?

    结论:
    在高级浏览器下,是可以写进去的。 chrome 上甚至可以通过 ajax 请求写入 cookie 。
    但在 IE8 ( 9 好像也有)以下, a 域下的来自 b 域的 iframe ,是无法写入 cookie 的。这种 cookie 叫第三方 cookie ,不信你可以去看浏览器设置(浏览器设置为全放行第三方 cookie 的话,可以正常写入), IE 右下文会有一个小标识,提示有第三方 cookie 写入被拒绝。

    这时想正常写入,就需要 P3P header ,类似『 P3P:CP=" OTI DSP COR IVA OUR IND COM "』里面的第个词都有应的意思。而且完整的 p3p header 会有相应的隐私策略 xml, IE 用户可以点进去看对应的隐私条款。
    p3p header 必须由 b.html 携带, cookie 也从此条请求 response 中下发才可以, b.html 里面的 ajax header 中携带,或者在前端 setCookie 都是无效的。


    ——————————————
    不信?把浏览器所有 cookie 全清掉,然后访问个挂百度联盟的小电影网站,看看 baidu.com 下是不是被写入了一堆 cookie 。你自己不加 p3p ,在 IE 下打死都写不进去。

    这个场景算是 cors 里面的一种,和 Oauth 没有半毛钱关系(你可曾见过,你访问挂联盟广告的网站,弹个 oauth 确认?)。
    andy12530
        9
    andy12530  
       2016-02-03 11:20:25 +08:00
    抱歉,有错别字。上面『 JSON 』修改为『 JSONP 』
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2605 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:48 · PVG 18:48 · LAX 02:48 · JFK 05:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.