2010-03-30 48 views
0

我有两个网站 - 都是我的项目。在现场二,我需要检查用户是否在现场登录。我想这样做,我应该创建一个脚本,将cookie放入iframe的主体中,然后在第二个站点上读取iframe的内容。但我不能。跨不同主机读取饼干

这里是我的测试目的做出了代码:
http://jsbin.com/oqaza/edit

我得到了一个错误,即说:

“权限遭拒, < http://jsbin.com>来获得属性 HTMLDocument.nodeType从 < http://www.google.com>“。

+0

这永远不会那样工作。只是想象一下ebay-iframe可以保存我的cookie数据,并且您可以从您的受控站点读取这些数据。 猜你必须做这个服务器端。 – mana 2010-03-30 16:01:17

+0

这适用于堆栈溢出,用户可以使用Google帐户登录。 – Thinker 2010-04-03 13:22:07

回答

0

我终于明白了。通常有像“OpenID”(即使在这里使用SO)的解决方案,但我发现,JSONP是最简单的方法来读取跨域的Cookie :)

+0

你是如何完成这项工作的?我发现IE遇到的问题,即在发出JSONP请求时不会将cookie发送到其他域。 – 2011-03-15 20:31:32

1

iframe文档受Same Origin Policy的约束 - 您无法从另一台主机上的页面访问一台主机上的内容。 AJAX请求也是如此。

对于现代浏览器,一种解决方案是Cross Document Messaging

0

正如其他人所提到的,由于安全问题,使用cookie并不是一个好的选择。你可能通过将已登录的用户返回到其他站点,检查cookie,并用指示状态的查询字符串将它们回传到它们所在的页面来做到这一点,但至少可以这么说。

更好的方法是在site1上创建一个Web服务(或者MVC JsonResult,如果您使用.Net MVC),它可以响应来自site2的关于登录状态的AJAX请求。