使用easyxdm读取跨域Cookie数据

时间:2014-02-13 21:29:59

标签: javascript cross-domain jsonp cors easyxdm

我有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>

1 个答案:

答案 0 :(得分:0)

使用xdomain解决此问题:https://github.com/jpillora/xdomain

易于实施并解决了跨域数据的问题。远非完美,但是直到CORS得到更好的支持并且旧的浏览器脱落,它才有效。