22

オンラインでこの状況に特有のものを見つけることができなかったので、ここに行きます...「second.com」を閲覧しているときに「first.com」に保存されているCookieを設定/取得する必要があります。「first. .com」ですが、「second.com」ではJavaScriptアクセスしかありません(必要に応じてDOMを操作できます)。

私の最初のアプローチは、「first.com/doAjax?setCookie=xxx」のようなページをロードし、「first.com/setCookie?cookieData=xxx」という ajax 呼び出しを行った、second.com (js を使用) に iframe を作成することでした。これにより、渡されたデータを使用して「first.com」に Cookie が設定されます。

second.com から first.com に Cookie を設定する場合、ほとんど問題なく動作しました。Cookie を取得する場合は、基本的に同じ手順に従い、「first.com/doAjax?getCookie」をロードする iframe を作成し、ajax 呼び出しを実行します。 「first.com/getCookie」と言うと、first.com の Cookie 情報が読み取られ、JSON オブジェクトとして返されます。

問題は、その JSON cookie オブジェクトを「second.com」に戻すことができないため、それを読み取ることができないことです。「window.top」を使用して Ajax 呼び出しが完了したときにそれを戻すことができるかもしれませんが、タイミングの問題があります。 iframeがロードされたときとは関係がないためです。私が明確であることを願っており、このクレイジーなiframe-> ajaxのがらくたよりも簡単な解決策があるかどうか疑問に思っていました。これは、SAFARIでCookieを取得するためにも機能しないようです。

4

3 に答える 3

9

必要な関数に必要な Cookie を渡すコールバックを使用して、スクリプト要素をドキュメントの 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'});
于 2008-12-31T05:20:53.753 に答える
0

この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();
}

よろしく、ロバート

于 2009-01-02T08:39:43.727 に答える
-2

SETTING 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();
}

これはすべてのブラウザで機能するはずです。

于 2009-01-04T09:03:13.310 に答える