0

我有 2 个域 - domain1.com 和 domain2.com - 其中 domain1.com 是我的父站点, domain2.com 是子站点。我在 domain1.com 上设置 cookie,但 domain2.com 需要访问这些 cookie。

我已经对这个主题进行了大量研究——JSONP、CORS、选择任何东西。 EasyXDM似乎提供了一个很好的解决方案。domain2.com 和 domain1.com 之间的消息传递按预期工作,但某些浏览器,即 Chrome 和 IE,没有读取 cookie,因此传递空白数据。

Domain1.com 有一个名为 status.php 的页面,其中包含以下数据:

<?php
    $guid = $_COOKIE['user_guid'];
?>

<!doctype html>
<html>
    <head>
        <title>easyXDM.Transport test</title>
        <script type="text/javascript" src="/js/easyxdm/easyXDM.debug.js"></script>
    </head>
    <body>
        <script>
        var socket = new easyXDM.Socket({
            onReady: function() {
                socket.postMessage('<?php echo $guid; ?>');
            }
        });
        </script>
    </body>
</html>

Domain2.com 具有以下设置来接收来自 domain1.com 的消息:

var socket = new easyXDM.Socket({
    remote: "http://domain1.com/status.php",
    onMessage: function(message, origin)
    {
        alert("Received '" + message + "' from '" + origin + "'");
    }       
});

这就像 FireFox 中的冠军,但 Chrome 和 IE 返回一个空字符串,而不是获取 cookie 数据。任何人都可以用这个把我推向正确的方向吗?我不能在两个域上都设置 cookie,我只需要能够以任何必要的方式从第一个域中获取 ID。谢谢!

根据评论中的要求,这是域 2 的完整代码:

<!doctype html>
<html>
    <head>
        <title>Domain 2</title>
        <script type="text/javascript" src="/js/easyxdm/easyXDM.debug.js"></script>
    </head>
    <body>
        <script>
        var socket = new easyXDM.Socket({
            remote: "http://domain1.com/status.php",
            onMessage: function(message, origin)
            {
                alert("Received '" + message + "' from '" + origin + "'");
            }       
        });
        </script>
        <p>Hello World!</p>
    </body>
</html>
4

1 回答 1

0

改用 xdomain 解决了这个问题:https ://github.com/jpillora/xdomain

易于实现,解决了跨域数据的问题。远非完美,但在 CORS 得到更好的支持并且旧版浏览器退出之前,它确实有效。

于 2014-08-20T14:44:32.393 回答