문제

온라인 에서이 상황에 특별한 것을 찾을 수 없었기 때문에 여기에 간다 ... "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();
}

모든 브라우저에서 작동해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top