Получение настроек 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();
}
Это должно работать на всех браузерах.