使用javascript或其他方法在不同的域上设置cookie

时间:2008-12-31 05:13:37

标签: javascript dns cookies

在网上找不到任何特殊情况,所以我去... 我需要在浏览“second.com”时设置/获取存储在“first.com”的cookie,我可以完全访问“first.com”但我只能访问javascript(可以操作我想要的DOM)“ second.com”。

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

在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。

3 个答案:

答案 0 :(得分: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'});

答案 1 :(得分: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();
}

此致 罗伯特

答案 2 :(得分:-2)

对于SETTING cookies,您可以按如下方式更改我的脚本:

新的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();
}

这适用于所有浏览器。