Получение установочных файлов cookie в разных доменах, с помощью javascript или других
-
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();
}
Это должно работать во всех браузерах.