Frage

nicht in der Lage gewesen, etwas Besonderes zu dieser Situation zu finden online so hier gehen i ... Ich brauche zu setzen / erhalten die bei „first.com“ gespeicherten Cookies während des Surfens „second.com“ Ich habe vollen Zugriff von „first.com“, aber ich habe nur die JavaScript-Zugriff (kann das DOM manipulieren, wie ich will) auf " second.com“.

Mein erster Ansatz war ein iframe auf second.com (mit js) zu erstellen, die eine Seite wie „first.com/doAjax?setCookie=xxx“ geladen und das einen Ajax-Aufruf tat „first.com/setCookie zu sagen? cookieData = xxx first.com ‚mit den Daten um uns bestehen“, die den Cookie auf setzen würden‘.

Das ist ziemlich viel feiner gearbeitet first.com das Cookie für die Einstellung von second.com - für einen Keks bekommen folgte ich im Grunde nach dem gleichen Verfahren erstellt die iframe, die „first.com/doAjax?getCookie“ geladen und das tun würde, ein ajax-Aufruf zu sagen: „first.com/getCookie“, die die Cookie Informationen über first.com und senden sie es als JSON-Objekt lesen würde.

Das Problem ist, dass ich nicht in der Lage bin, dass JSON Cookie-Objekt zurück zu bringen „second.com“ so kann ich es lesen, gut, vielleicht könnte ich es nur bringen, wenn der Ajax-Aufruf abgeschlossen ist mit „window.top“ aber gibt es Timing-Probleme, weil es nicht in Bezug auf, wenn der iframe geladen wurde. Ich hoffe, dass ich klar bin und habe mich gefragt, ob es eine einfachere Lösung, anstatt dieser verrückten iframe-> Ajax-Mist, scheint auch, wie diese nicht sogar für immer Cookies in SAFARI arbeiten.

War es hilfreich?

Lösung

Sie können ein Skript Element in HEAD des Dokuments mit einem Rückruf injizieren, die das Cookie gibt müssen Sie alles, was es braucht Funktion.

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

Andere Tipps

Setzen Sie diese PHP-Datei auf first.com:

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

Auf second.com können Sie diese Javascript, 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();
}

Viele Grüße, Robert

Für Cookies einstellen Sie können mein Skript wie folgt ändern:

Das neue PHP-Script:

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

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

Das sollte auf allen Browsern funktioniert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top