22

无法在网上找到任何特别针对这种情况的信息,所以我开始...我需要在浏览“second.com”时设置/获取存储在“first.com”中的 cookie,我可以完全访问“first.com” .com”,但我在“second.com”上只有 javascript 访问权限(可以根据需要操作 DOM)。

我的第一种方法是在 second.com(带有 js)上创建一个 iframe,它加载了一个像“first.com/doAjax?setCookie=xxx”这样的页面,并且执行了一个 ajax 调用来说“first.com/setCookie?cookieData=xxx” " 这将使用我们传递的数据在 "first.com" 上设置 cookie。

这对于从 second.com 在 first.com 上设置 cookie 非常有效 - 为了获取 cookie,我基本上遵循相同的过程,创建了加载“first.com/doAjax?getCookie”的 iframe,并且会执行 ajax 调用说“first.com/getCookie”,它将读取 first.com 上的 cookie 信息并将其作为 JSON 对象返回。

问题是我无法将该 JSON cookie 对象带回“second.com”,因此我可以阅读它,也许我可以在使用“window.top”完成 Ajax 调用时将其带回,但存在时间问题因为它与加载 iframe 的时间无关。我希望我很清楚,想知道是否有更简单的解决方案,而不是这种疯狂的 iframe->ajax 废话,似乎这甚至不适用于在 SAFARI 中获取 cookie。

4

3 回答 3

9

您可以使用回调将脚本元素注入文档的 HEAD,该回调将您需要的 cookie 传递给任何需要它的函数。

就像是:

 <script type="text/javascript">
   var newfile=document.createElement('script');
   newfile.setAttribute("type","text/javascript");
   newfile.setAttribute("src", 'http://first.com/doAjax?getCookie&callback=passCookie');
   document.getElementsByTagName("head")[0].appendChild(newfile);
 </script>

页面 first.com/doAjax?getCookie 可以这样做:

     passCookie({'name':'mycookie', 'value':'myvalue'});
于 2008-12-31T05:20:53.753 回答
0

将此 PHP 文件放入 first.com:

//readcookie.php    
echo $_COOKIE['cookiename'];

在 second.com 上,您可以使用此 javascript 来获取值:

function readCookieCallback()
{
   if ((this.readyState == 4) && (this.status == 200))
   {
     alert("the value of the cookie is: "+this.responseText);
   } 
   else if ((this.readyState == 4) && (this.status != 200))
   {
     //error...
   }
}


function buttonClickOrAnything()
{
  var refreshObject = new XMLHttpRequest();
  if (!refreshObject)
  {
    //IE6 or older
    try
    {
      refreshObject = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e)
    {
      try
      {
        refreshObject = new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch (e)
      {
        return;
      }
    }
  }
  refreshObject.onreadystatechange = readCookieCallback;
  refreshObject.open("GET", "http://www.first.com/readcookie.php");
  refreshObject.send();
}

问候,罗伯特

于 2009-01-02T08:39:43.727 回答
-2

对于设置 cookie,您可以按如下方式更改我的脚本:

新的 PHP 脚本:

//writecookie.php
setcookie($_GET['c'], $_GET['v']);

和 JavaScript:

function buttonClickOrAnything()
{
  var refreshObject = new XMLHttpRequest();
  if (!refreshObject)
  {
    //IE6 or older
    try
    {
      refreshObject = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e)
    {
      try
      {
        refreshObject = new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch (e)
      {
        return;
      }
    }
  }
  refreshObject.open("GET", "http://www.first.com/writecookie.php?c=cookiename&v=cookievalue");
  refreshObject.send();
}

这应该适用于所有浏览器。

于 2009-01-04T09:03:13.310 回答