跨协议cookie iFrame

时间:2012-08-30 13:36:37

标签: javascript http cookies https xss

我在 http ://localhost/mySite/Page1.aspx上有一个网页,其中包含一个带有src https :// localhost / mySite / Page2的iframe。 ASPX。

在iframe页面(Page2.aspx)中,我使用JavaScript设置cookie。我如何在父页面上读取该cookie(Page1.aspx)???看起来Page1看不到Page2设置的cookie。

要设置/读取cookie,我使用jQuery.Cookie插件:

$.cookie('myKey', JSON.stringify(data), { expires: 1, path: '/', domain: 'localhost' });
顺便说一句,如果有人能让我知道如何在这样的方案中在客户端上传输数据,我很高兴知道它(服务器池不是我的解决方案)。 我发现它适用于sessionStorage / localStorage,但它只适用于IE :(

2 个答案:

答案 0 :(得分:1)

根据问题的评论:

该问题源于同源政策(SOP),该政策禁止不同来源的内容相互干扰。 不同来源不仅基于域的比较,还基于使用的协议,因为它是clearly shown on this Wikipedia page。因此,http://localhosthttps://localhost不同。

为了使这两个来源能够沟通:

  • this link完美地描述了常用的技术(iframe代理和URL轮询),并在其“物理定律:您可以用IFrame做什么”段落中可理解地总结SOP的规则
  • this other well-documented article(从上面的文章链接)将常用技术合并为优雅的解决方案
  • 如果目标浏览器都符合HTML5标准(即最新和标准的浏览器,即不是大多数MSIE版本),该标准引入了一个新的帧间通信系统{{1} }和window.postMessage()事件

还有免费的预构建解决方案(我没有测试过),例如Ternarylabs' PortholeEasyXDM

干杯!

答案 1 :(得分:0)

我不认为这是完全正确的。安全属性未设置为true的cookie将在域中共享,而不管使用的协议如何。

真正的问题是jquery忽略了这个方面,可以通过secure=true问题使用$.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });将{{1}}指定为JSON属性来更改。