Получение настроек куки на разных доменах, с помощью JavaScript или других - PullRequest
22 голосов
/ 31 декабря 2008

Не удалось найти что-то конкретное для этой ситуации в Интернете, поэтому здесь я иду ... Мне нужно установить / получить cookie-файлы, хранящиеся на сайте «first.com» при просмотре «second.com», у меня полный доступ к «first.com», но у меня есть только доступ к javascript (я могу манипулировать DOM по своему усмотрению) on » 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, и похоже, что это даже не сработает для получения куки в SAFARI.

Ответы [ 3 ]

9 голосов
/ 31 декабря 2008

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

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

 <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'});
0 голосов
/ 04 января 2009

Для настройки куки вы можете изменить мой скрипт следующим образом:

Новый PHP-скрипт:

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

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

0 голосов
/ 02 января 2009

Поместите этот 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();
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...