Obtendo biscoitos configuração em diferentes domínios, com javascript ou outro

StackOverflow https://stackoverflow.com/questions/402348

  •  03-07-2019
  •  | 
  •  

Pergunta

não foram capazes de encontrar qualquer coisa em particular a esta situação on-line Então aqui vou eu ... Eu preciso definir / obter os cookies armazenados em "first.com" enquanto navega "second.com", eu tenho acesso completo de "first.com", mas eu só tenho acesso javascript (pode manipular o DOM como eu quero) sobre " second.com".

A minha primeira abordagem foi criar um iframe em second.com (com js) que carregou uma página como "first.com/doAjax?setCookie=xxx" e que fez uma chamada de ajax para dizer "first.com/setCookie? cookieData = xxx", que iria definir o cookie no 'first.com' com os dados que nós passamos ao redor.

Esta coima praticamente trabalhou para definir o cookie no first.com de second.com - para obter um cookie eu basicamente seguiu o mesmo procedimento, criou o iframe que carregado "first.com/doAjax?getCookie" e que faria uma chamada de ajax para dizer "first.com/getCookie", que iria ler a informação cookie no first.com e devolvê-lo como um objeto JSON.

O problema é que eu sou incapaz de trazer esse cookie JSON objeto de volta para "second.com" para que eu possa lê-lo, bem, talvez eu poderia apenas trazê-lo quando a chamada Ajax está completo utilizando "window.top", mas há problemas de tempo porque não é em relação a quando o iframe foi carregado. Espero que eu sou claro e queria saber se há uma solução mais fácil, em vez de este louco iframe-> ajax porcaria, também parece que este trabalho ainda não vai para obter os cookies no Safari.

Foi útil?

Solução

Você pode injetar um elemento de script no HEAD do documento com um retorno de chamada que passa o cookie que você precisa para qualquer função precisa.

Algo como:

 <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 o first.com/doAjax?getCookie página poderia fazer isso:

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

Outras dicas

Coloque este PHP-File para first.com:

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

Em second.com você pode usar este javascript para obter o valor:

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

Saudações, Robert

Para biscoitos configuração que você pode mudar meu script da seguinte forma:

O novo PHP-Script:

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

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

Isso deve funcionar em todos os navegadores.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top