JavaScriptまたはその他を使用して、異なるドメインでCookieを設定する
-
03-07-2019 - |
質問
この状況に特有の何かをオンラインで見つけることができなかったので、ここに行きます... 「first.com」に保存されているCookieを設定/取得する必要があります。 「second.com」を閲覧している間、「first.com」にフルアクセスできます。しかし、私は" second.com"でjavascriptにしかアクセスできません(必要に応じてDOMを操作できます)。
最初のアプローチは、" first.com/doAjax?setCookie = xxx"のようなページを読み込んだiframeをsecond.comに(jsを使用して)作成することでした。そして、それは" first.com/setCookie?cookieData = xxx"と言うajax呼び出しを行いました。 " first.com"でCookieが設定されます。渡したデータで。
これは、first.comのcookieをsecond.comから設定するためにほぼ正常に機能しました。そして、これは「quot.first.com/getCookie」と言うためにajax呼び出しを行います。 first.comのCookie情報を読み取り、JSONオブジェクトとして返します。
問題は、そのJSON Cookieオブジェクトを" second.com"に戻すことができないことです。ですから、それを読むことができます。「window.top」を使用してAjax呼び出しが完了したときに持っていくだけでもいいかもしれません。ただし、iframeが読み込まれたときとは関係がないため、タイミングの問題があります。私は明確であり、このクレイジーなiframe-> ajax crapよりも簡単な解決策があるかどうか疑問に思っていましたが、これもSAFARIでCookieを取得するのにうまくいかないようです
解決
必要な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'});
他のヒント
このPHPファイルをfirst.comに追加します:
//readcookie.php
echo このPHPファイルをfirst.comに追加します:
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();
}
second.comでは、このjavascriptを使用して値を取得できます。
<*>
よろしく、
ロバート
COOKIE['cookiename'];
second.comでは、このjavascriptを使用して値を取得できます。
<*>よろしく、 ロバート
Cookieを設定するには、スクリプトを次のように変更できます。
新しいPHPスクリプト:
//writecookie.php
setcookie( Cookieを設定するには、スクリプトを次のように変更できます。
新しいPHPスクリプト:
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();
}
そしてJavaScript:
<*>
これはすべてのブラウザで動作するはずです。
GET['c'], Cookieを設定するには、スクリプトを次のように変更できます。
新しいPHPスクリプト:
<*>
そしてJavaScript:
<*>
これはすべてのブラウザで動作するはずです。
GET['v']);
そしてJavaScript:
<*>これはすべてのブラウザで動作するはずです。