it-swarm.com.de

Cookies auf verschiedenen Domains setzen, mit Javascript oder anderen

Ich habe bisher nichts spezielles zu dieser Situation online gefunden, also gehe ich ... Ich muss die Cookies setzen, die auf "first.com" gespeichert sind, während ich auf "second.com" browse Vollzugriff von "first.com", aber ich habe nur Javascript-Zugriff (kann das DOM nach Belieben manipulieren) auf "second.com".

Mein erster Ansatz bestand darin, auf second.com (mit js) einen iframe zu erstellen, der eine Seite wie "first.com/doAjax?setCookie=xxx" geladen hat und einen Ajax-Aufruf mit der Aufforderung "first.com/setCookie?cookieData=xxx" durchführte "was den Cookie auf" first.com "mit den Daten setzen würde, die wir herumgereicht haben. 

Für das Setzen des Cookies auf first.com von second.com hat das ziemlich gut funktioniert. Um ein Cookie zu bekommen, habe ich im Wesentlichen das gleiche Verfahren befolgt, den iframe erstellt, der "first.com/doAjax?getCookie" geladen hat und einen Ajax-Aufruf ausführen würde Um "first.com/getCookie" zu sagen, würde die Cookie-Information auf first.com gelesen und als JSON-Objekt zurückgegeben. 

Das Problem ist, dass ich das JSON-Cookie-Objekt nicht auf "second.com" zurückbringen kann, sodass ich es lesen kann. Vielleicht könnte ich es auch bringen, wenn der Ajax-Aufruf mit "window.top" abgeschlossen ist, aber es gibt Probleme mit dem Timing weil es nicht relativ zu dem Zeitpunkt ist, zu dem der iframe geladen wurde. Ich hoffe, ich bin klar und habe mich gefragt, ob es eine einfachere Lösung gibt als diesen verrückten iframe-> ajax-Mist. Außerdem scheint es so, als würde dies nicht einmal dazu führen, Cookies in SAFARI zu erhalten.

22
Luca Matteis

Sie können ein Skriptelement in HEAD des Dokuments mit einem Rückruf einfügen, der das Cookie, das Sie benötigen, an die Funktion weiterleitet, die es benötigt. 

So etwas wie:

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

Und die Seite first.com/doAjax?getCookie könnte dies tun:

     passCookie({'name':'mycookie', 'value':'myvalue'});
9
Ryan Doherty

Legen Sie diese PHP-Datei auf first.com ab:

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

Auf second.com können Sie dieses Javascript verwenden, um den Wert zu erhalten:

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

Grüße, Robert

0
Robert Wismet