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

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

  •  03-07-2019
  •  | 
  •  

Question

N'ayant pas pu trouver quoi que ce soit de particulier à cette situation en ligne, alors j'y vais ... Je dois configurer / obtenir les cookies stockés sur " first.com " en naviguant sur " second.com &,, j'ai un 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 cela a fait un appel ajax pour dire "first.com/setCookie? cookieData = xxx". qui placerait le cookie sur " first.com " avec les données que nous avons transmises.

Cela a très bien fonctionné pour définir 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 cela ferait un appel ajax pour dire " first.com/getCookie" qui lirait les informations de cookie sur first.com et les renverrait en tant qu’objet JSON.

Le problème est que je ne parviens pas à ramener cet objet cookie JSON à "second.com". pour que je puisse le lire, eh bien, je pourrais peut-être le rapporter une fois l’appel Ajax terminé avec "window.top". mais il y a des problèmes de synchronisation car ce n'est pas relatif au moment où l'iframe a été chargé. J'espère que je suis clair et que je me demandais s'il existait une solution plus simple plutôt que cette merde d'iframe - > ajax, semble également que cela ne fonctionnerait même pas pour obtenir des cookies dans SAFARI.

Était-ce utile?

La solution

Vous pouvez injecter un élément de script dans HEAD du document avec un rappel qui transmet le cookie nécessaire à la fonction qui en a besoin.

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

Autres conseils

Placez ce fichier PHP sur first.com:

//readcookie.php    
echo 

Placez ce fichier PHP sur 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();
}

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

<*>

Cordialement, Robert

COOKIE['cookiename'];

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

<*>

Cordialement, Robert

Pour les cookies de configuration, vous pouvez modifier mon script comme suit:

Le nouveau script PHP:

//writecookie.php
setcookie(

Pour les cookies de configuration, vous pouvez modifier mon script comme suit:

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

Et le JavaScript:

<*>

Cela devrait fonctionner sur tous les navigateurs.

GET['c'],

Pour les cookies de configuration, vous pouvez modifier mon script comme suit:

Le nouveau script PHP:

<*>

Et le JavaScript:

<*>

Cela devrait fonctionner sur tous les navigateurs.

GET['v']);

Et le JavaScript:

<*>

Cela devrait fonctionner sur tous les navigateurs.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top