最近想造个 SSO 的轮子,查 UCenter 的代码的时候发现他们在实现同步登陆的技术上,应用了 P3P 这个技术实现跨域 cookie 。查了一下发现这个技术据说很吊的样子,但是也发现似乎最近提到的非常少啊……这个技术最近的情况是什么样子的。有没有哪位给普及下……是有什么缺陷么?
1
explon 2016-02-03 00:38:17 +08:00 via iPhone
因为用 JS 调用的解决方式还是兼容性更好
|
2
explon 2016-02-03 00:39:10 +08:00 via iPhone
补充 JS 调用: Script 标签载入跨域 Cookie
|
3
Vi 2016-02-03 02:45:03 +08:00
因为这是 ms 的。。
|
4
emric 2016-02-03 03:35:42 +08:00
P3P 不是跨域技术,而是 IE 浏览器隐私设置中的一个协议,相当于严格版本 “禁止跟踪”。
不通过 P3P 申报网站的私隐政策,就不允许跨域设置 Cookie 。 |
5
tabris17 2016-02-03 07:47:01 +08:00 via iPhone
ie 私有的,兼容性不行
|
6
jugelizi 2016-02-03 09:04:19 +08:00
p3p 是为了兼容 ie 的
现代浏览器用 cors |
7
cszchen 2016-02-03 09:13:47 +08:00
UCenter 同步登陆的技术用 js 轮询实现的吧?
比不上 auth2.0 的方式 |
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 确认?)。 |
9
andy12530 2016-02-03 11:20:25 +08:00
抱歉,有错别字。上面『 JSON 』修改为『 JSONP 』
|