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

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

  •  03-07-2019
  •  | 
  •  

Вопрос

Мне не удалось найти ничего конкретного по этой ситуации в Интернете, так что я начинаю...Мне нужно установить / получить файлы 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 from 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, также кажется, что это даже не сработает для получения файлов cookie в SAFARI.

Это было полезно?

Решение

Вы могли бы ввести элемент script в 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'});

Другие советы

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

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

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

Новый 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();
}

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top