Domanda

Non sono stato in grado di trovare nulla di particolare in questa situazione online, quindi eccomi qui ... Devo impostare / ottenere i cookie memorizzati su " first.com " durante la navigazione di " second.com " ;, ho pieno accesso a " first.com " ma ho accesso javascript (posso manipolare il DOM come voglio) su " second.com " ;.

Il mio primo approccio è stato quello di creare un iframe su second.com (con js) che caricasse una pagina come " first.com/doAjax? setCookie = xxx " e che ha fatto una chiamata ajax per dire " first.com/setCookie? cookieData = xxx " che imposterebbe il cookie su " first.com " con i dati che abbiamo passato.

Che ha funzionato praticamente bene per impostare il cookie su first.com da second.com - per ottenere un cookie ho sostanzialmente seguito la stessa procedura, ho creato l'iframe che ha caricato " first.com/doAjax? getCookie " e che farebbe una chiamata Ajax per dire " first.com/getCookie" che leggerebbe le informazioni sui cookie su first.com e le restituirebbe come oggetto JSON.

Il problema è che non riesco a riportare l'oggetto cookie JSON su " second.com " così posso leggerlo, beh forse potrei semplicemente portarlo quando la chiamata Ajax è completa usando " window.top " ma ci sono problemi di temporizzazione perché non è relativo a quando l'iframe è stato caricato. Spero di essere chiaro e mi chiedevo se esiste una soluzione più semplice di questa pazza merda iframe- > ajax, sembra anche che questo non funzionerà nemmeno per ottenere biscotti in SAFARI.

È stato utile?

Soluzione

È possibile iniettare un elemento di script in HEAD del documento con un callback che passa il cookie necessario a qualunque funzione lo richieda.

Qualcosa del tipo:

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

E la pagina first.com/doAjax?getCookie potrebbe farlo:

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

Altri suggerimenti

Metti questo file PHP su first.com:

//readcookie.php    
echo 

Metti questo file PHP su 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();
}

Su second.com puoi usare questo javascript per ottenere il valore:

<*>

Saluti, Robert

COOKIE['cookiename'];

Su second.com puoi usare questo javascript per ottenere il valore:

<*>

Saluti, Robert

Per l'impostazione dei cookie è possibile modificare il mio script come segue:

Il nuovo script PHP:

//writecookie.php
setcookie(

Per l'impostazione dei cookie è possibile modificare il mio script come segue:

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

E JavaScript:

<*>

Dovrebbe funzionare su tutti i browser.

GET['c'],

Per l'impostazione dei cookie è possibile modificare il mio script come segue:

Il nuovo script PHP:

<*>

E JavaScript:

<*>

Dovrebbe funzionare su tutti i browser.

GET['v']);

E JavaScript:

<*>

Dovrebbe funzionare su tutti i browser.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top