Ottenere l'impostazione dei cookie su domini diversi, con javascript o altro
-
03-07-2019 - |
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.
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.