web-dev-qa-db-fra.com

Obtenir des cookies de configuration sur différents domaines, avec javascript ou autre

N'ayant pas été en mesure de trouver quoi que ce soit de particulier à cette situation en ligne, je suis donc ici ... Je dois configurer/obtenir les cookies stockés sur "first.com" tout en naviguant sur "second.com", accès complet à "first.com" mais je n’ai qu’un accès javascript (je peux manipuler le DOM comme je le souhaite) sur "second.com".

Ma première approche consistait à créer un iframe sur second.com (avec js) qui chargeait une page du type "first.com/doAjax?setCookie=xxx" et qui effectuait un appel ajax pour dire "first.com/setCookie?cookieData=xxx "qui définirait le cookie sur" first.com "avec les données que nous avons transmises. 

Cela a très bien fonctionné pour configurer le cookie sur first.com de second.com - pour obtenir un cookie, j'ai essentiellement suivi la même procédure, créé l'iframe qui a chargé "first.com/doAjax?getCookie" et qui effectuait un appel ajax pour dire "first.com/getCookie" qui lirait les informations de cookie sur first.com et les renverrait sous forme d'objet JSON. 

Le problème est que je ne peux pas ramener cet objet cookie JSON à "second.com" afin que je puisse le lire. Eh bien, je pourrais peut-être le rapporter une fois l'appel Ajax terminé à l'aide de "window.top", mais il y a des problèmes de synchronisation. parce que ce n'est pas relatif à quand l'iframe a été chargé. J'espère que je suis clair et que je me demandais s'il existait une solution plus facile plutôt que cette merde d'ifram-> ajax fou, semble également que cela ne fonctionnera même pas pour obtenir des cookies dans SAFARI.

22
Luca Matteis

Vous pouvez injecter un élément de script dans HEAD du document avec un rappel rappelant le cookie dont vous avez besoin, quelle que soit la fonction utilisée. 

Quelque chose comme:

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

Et la page first.com/doAjax?getCookie pourrait le faire:

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

Mettez ce fichier PHP sur first.com:

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

Sur second.com, vous pouvez utiliser ce javascript pour obtenir la valeur:

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

Cordialement, Robert

0
Robert Wismet