Cross protocol cookie iFrame

Cross protocol cookie iFrame

本文关键字:iFrame cookie protocol Cross      更新时间:2023-09-26

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

在iframe页面(Page2.aspx)中,我用JavaScript设置了cookie。我怎样才能读取父页面(Page1.aspx)上的cookie???看起来Page1没有看到Page2设置的cookie。

为了设置/读取Cookie,我使用jQuery.Cookie插件:

$.cookie('myKey', JSON.stringify(data), { expires: 1, path: '/', domain: 'localhost' });

顺便说一句,如果有人能告诉我如何在这种方案中在客户端上传输数据,我会很高兴知道这一点(服务器池对我来说不是一个解决方案)。我发现它适用于sessionStorage/localStorage,但它只适用于IE:(

基于问题的评论:

这个问题是由于同源政策(SOP),该政策禁止不同来源的内容相互干扰不同的来源不仅基于域的比较,还基于所使用的协议,正如维基百科页面上清楚显示的那样。因此,http://localhosthttps://localhost是不同的起源。

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

  • 这个链接完美地描述了常用的技术(iframe代理和URL轮询),并在其"物理定律:你可以用iframe做什么"一段中清晰地总结了SOP的规则
  • 另一篇文献丰富的文章(链接自上面的文章)将常用的技术融合到一个优雅的解决方案中
  • 如果目标浏览器都是HTML5兼容的(即最新的和标准的浏览器,即不是大多数MSIE版本),该标准引入了一个新的具有window.postMessage()onMessage事件的帧间通信系统

还有免费的预构建解决方案(我没有测试),比如Ternarylabs的Porthole或EasyXDM。

干杯!

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

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