在前不久的产品需求中,我们遭遇到一次跨域所带来的难题,起因是需求方要求打通两个部署在不同域下的产品通道,由一个系统直接调用另一个系统已有的功能页来查询并获取满足条件的产品信息。
由于另一个系统使用cookie来保存用户登陆信息,并存在半小时无操作后失效的限制,所以我们在使用iframe引入该系统功能页面的同时,还设置了定时请求的机制来保持连接。但进入IE下测试时,该方案无效,trace跟踪了很久后,发现是因为iframe页面中,cookie没有办法写进去,所以定时请求失效了。在翻阅了IE相关资料后,发现在IE下,因为存在P3P的隐私保护功能,所以frame(iframe)中如果是嵌入其它域的页面时,是无法正常的操作对应域的cookies值的。最简便的处理就是直接在iframe中的功能页面中加入P3P的认证,即允许第三方读取cookie,这样cookie值才能被正确的存取。
一般正常的cookie只会在一个application中共享,即由创建它的application使用。 但有时候我们需要跨应用或域名设置cookies。如果在同一个域名不同的应用中,可以通过cookie.setPath()的方式来实现;如果是跨域名,可以通过cookie.setDomain的方式来实现。 如果是在一个主系统中放入iframe,让iframe引用不同域名的子系统页面,且同时需要操作子系统的cookies时,就需要在子系统对应的页面或登陆代码中设置P3P 的header来兼容IE浏览器(子系统的cookie机制不能是浏览器进程)。
什么是P3P?
P3P是万维网联盟(W3C)公布的一项隐私保护推荐标准,旨在为网上冲浪的Internet用户提供隐私保护。现在有越来越多的网站在消费者访问时,都会收集一些用户信息。制定P3P标准的出发点就是为了减轻消费者因网站收集个人信息所引发的对于隐私权可能受到侵犯的忧虑。P3P标准的构想是:Web 站点的隐私策略应该告之访问者该站点所收集的信息类型、信息将提供给哪些人、信息将被保留多少时间及其使用信息的方式,如站点应做诸如 “本网站将监测您所访问的页面以提高站点的使用率”或“本网站将尽可能为您提供更合适的广告”等申明。访问支持P3P网站的用户有权查看站点隐私报告,然 后决定是否接受cookie或是否使用该网站。
访问官方P3P网页以获取更多技术信息:http://www.w3.org/P3P 。