Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用easyxdm读取跨域Cookie数据_Javascript_Cross Domain_Jsonp_Cors_Easyxdm - Fatal编程技术网

Javascript 使用easyxdm读取跨域Cookie数据

Javascript 使用easyxdm读取跨域Cookie数据,javascript,cross-domain,jsonp,cors,easyxdm,Javascript,Cross Domain,Jsonp,Cors,Easyxdm,我有两个域名:domain1.com和domain2.com,其中domain1.com是我的父站点,domain2.com是子站点。我正在domain1.com上设置cookies,但domain2.com需要访问这些cookies 我已经研究了很多关于这个主题的东西——JSONP,CORS,选择任何东西。似乎提供了一个很好的解决方案。domain2.com和domain1.com之间的消息传递按预期工作,但某些浏览器,即Chrome和IE,没有读取cookie,因此传递空白数据 Domain

我有两个域名:domain1.com和domain2.com,其中domain1.com是我的父站点,domain2.com是子站点。我正在domain1.com上设置cookies,但domain2.com需要访问这些cookies

我已经研究了很多关于这个主题的东西——JSONP,CORS,选择任何东西。似乎提供了一个很好的解决方案。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>
这就像FireFox中的champ,但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>

域2
var套接字=新的easyXDM.socket({
远程:http://domain1.com/status.php",
onMessage:函数(消息、来源)
{
警报(“从“+”来源“+”收到“+”消息“+””);
}       
});
你好,世界


用xdomain解决了这个问题:


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

你不需要cookies,你需要postMessage()。或者,即使您需要cookies,您仍然需要postMessage()。。。如果您需要IE6+7支持(gasp),可以使用window.name技巧。@dandavis-我已经尝试过postMessage()。它也面临同样的问题。它不是从cookie.ok中传递数据,但这与JS无关,因为JS看到的都是字符串……我将cookie数据作为字符串传递给JS,以传递回需要它的domain2.com。它没有得到cookie数据。我对这个话题的理解是,这是一个跨领域的问题。我正试图找出如何使用任何必要的方法来解决这个问题。如果硬编码字符串值在Cookie不起作用的情况下工作,那么这是php/broswer策略问题,而不是js策略问题。使用easyXDM的人太少了。请你看一下好吗?
<!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>