Получение настроек cookie в разных доменах с помощью javascript или другого

Не удалось найти что-то особенное в этой ситуации онлайн, поэтому я иду... Мне нужно установить/получить файлы cookie, хранящиеся на "first.com" во время просмотра "second.com", у меня есть полный доступ к "first.com", но у меня только есть доступ к javascript (можно манипулировать DOM, как я хочу) second.com".

Мой первый подход заключался в том, чтобы создать iframe на second.com(с js), который загрузил страницу типа "first.com/doAjax?setCookie=xxx", и что сделал ajax-звонок, чтобы сказать "first.com/setCookie? cookieData = xxx", который установил бы cookie на "first.com" с данными, которые мы прошли.

Это очень хорошо работало для настройки cookie на first.com с сайта second.com - для получения файла cookie я в основном выполнял ту же процедуру, создавал iframe, который загружал "first.com/doAjax?getCookie", и это будет делать ajax, чтобы сказать "first.com/getCookie", который будет читать информацию cookie на first.com и возвращать ее как объект JSON.

Проблема в том, что я не могу вернуть этот объект cookie JSON на "second.com", чтобы я мог его прочитать, возможно, я мог бы просто принести его, когда вызов Ajax завершен с помощью "window.top", но там возникают проблемы, потому что это не относится к тому, когда был загружен iframe. Надеюсь, я поняла, и мне было интересно, есть ли более легкое решение, чем это безумное iframe- > ajax crap, также похоже, что это даже не работает для получения файлов cookie в SAFARI.

Ответ 1

Вы можете ввести элемент script в HEAD документа с обратным вызовом, который передает куки файл, который вам нужен, независимо от того, какая функция ему нужна.

Что-то вроде:

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

И страница first.com/doAjax?getCookie может сделать это:

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

Ответ 2

Поместите этот PHP файл на first.com:

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

На second.com вы можете использовать этот javascript для получения значения:

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

С уважением, Роберт

Ответ 3

Для НАСТРОЙКИ файлов cookie вы можете изменить мой script следующим образом:

Новый PHP- Script:

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

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

Это должно работать на всех браузерах.