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

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

在first.com上设置第二个网站上的cookie非常合适 - 为了获得一个cookie我基本上遵循相同的程序,创建了加载的iframe“first.com/doAjax?getCookie”那会做一个ajax调用来说“first.com/getCookie"它将读取first.com上的cookie信息并将其作为JSON对象返回。

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

有帮助吗?

解决方案

您可以使用回调将脚本元素注入到文档的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'});

其他提示

将此PHP文件放入first.com:

//readcookie.php    
echo 

将此PHP文件放入first.com:

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

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

<*>

此致 罗伯特

COOKIE['cookiename'];

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

<*>

此致 罗伯特

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

新的PHP脚本:

//writecookie.php
setcookie(

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

新的PHP脚本:

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

JavaScript:

<*>

这适用于所有浏览器。

GET['c'],

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

新的PHP脚本:

<*>

JavaScript:

<*>

这适用于所有浏览器。

GET['v']);

JavaScript:

<*>

这适用于所有浏览器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top