자바 스크립트 또는 기타로 다른 도메인에서 쿠키 설정
-
03-07-2019 - |
문제
온라인 에서이 상황에 특별한 것을 찾을 수 없었기 때문에 여기에 간다 ... "Second.com"을 탐색하는 동안 "First.com"에 저장된 쿠키를 설정/가져와야합니다. .com "하지만"Second.com "에서 JavaScript 액세스 (원하는대로 DOM을 조작 할 수 있음) 만 있습니다.
첫 번째 접근 방식은 second.com (JS 포함)에서 "first.com/doajax?setcookie=xxx"와 같은 페이지를로드하고 "first.com/setcookie?cookiedata=xxx"라고 말하기 위해 ajax 호출을 한 iframe을 만드는 것이 었습니다. "이것은 우리가 전달한 데이터와 함께"First.com "에 쿠키를 설정할 것입니다.
Second.com에서 쿠키를 설정하는 데 거의 잘 작동했습니다. 쿠키를 얻으려면 기본적으로 동일한 절차를 따랐으며 "first.com/doajax?getCookie"를로드 한 iframe을 만들었습니다. First.com의 쿠키 정보를 읽고 JSON 개체로 반환하는 "First.com/getCookie"라고 말하십시오.
문제는 JSON 쿠키 객체를 "Second.com"으로 되돌릴 수 없다는 것입니다. 그래서 읽을 수 있습니다. 아마도 Ajax 호출이 "window.top"을 사용하여 완료되면 가져올 수 있지만 타이밍 문제가 있습니다. Iframe이로드되었을 때와 관련이 없기 때문입니다. 나는 분명 하고이 미친 iframe-> ajax crap보다 더 쉬운 해결책이 있는지 궁금해하고 있었기 때문에 Safari에서 쿠키를 얻는데도 효과가 없을 것 같습니다.
해결책
쿠키를 전달하는 콜백을 사용하여 스크립트 요소를 문서의 헤드에 주입하여 필요한 기능이 필요한 기능에 주입 할 수 있습니다.
같은 것 :
<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>
그리고 page first.com/doajax?getCookie는 이것을 할 수 있습니다.
passCookie({'name':'mycookie', 'value':'myvalue'});
다른 팁
이 php-file을 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();
}
안부, 로버트
쿠키를 설정하려면 다음과 같이 내 스크립트를 변경할 수 있습니다.
새로운 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();
}
모든 브라우저에서 작동해야합니다.