0

jsonp を使用して、ドメイン A からドメイン B への Cookie 情報を取得できません。Chrome や Firefox などでは動作していますが、IE では動作しません。ドメインBからドメインAへのjsonpリクエストを実行して、ドメインAのphpを介してそこにCookieを設定し、Bから同じCookieを再度チェックします。次に、Cookie の情報が画面 (ドメイン A) に出力されるため、ドメイン B から取得して、その情報をミラーリングする Cookie をそこに設定できます (セキュリティ上のリスクを認識しています。機密情報を同期しようとはしていません)。情報はここにあり、単なる設定です)。

したがって、前述のように、これは FF、Chrome などで機能しています。しかし、IE では、セッション Cookie のみが返されることがわかります。

ここで何が問題なのか手がかりはありますか?それとも、これは不可能ですか?CORSも簡単に試しましたが、同じ問題があります。

次のテスト設定があります。

ドメイン A: (中央ドメイン)

login.php

<?php 
//below line solves the problem. See accepted answer
header('P3P: CP="Facebook does not have a P3P policy. Learn why here: http://fb.me/p3p"');
setcookie("loggedin","5",time()+3600);
echo 1;

check.php

<?php
//below line solves the problem. See accepted answer
header('P3P: CP="Facebook does not have a P3P policy. Learn why here: http://fb.me/p3p"');
$cookies = implode('; ', array_map(function ($v, $k) { return $k . '=' . $v; }, $_COOKIE, array_keys($_COOKIE)));

if(isset($_COOKIE['loggedin'])&&($_COOKIE['loggedin'] == "5")) {
        echo "alert('logged in, ".$cookies."');";
} else {
        echo "alert('not logged in, ".$cookies."');";
}

ドメイン B:

jsonp.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
</head>
<body>
<h1>hi!</h1>
<script>
        jQuery.ajax({
                url: 'http://cookies.hidev.nl/login.php',
                dataType: 'jsonp',
                type: "get",
        });
        //note: first call will set the cookie, next succeeds only after reload due to async loading. This is only for test purposes
        jQuery.ajax({
                url: 'http://cookies.hidev.nl/check.php',
                dataType: 'jsonp',
                type: "get"
        });

</script>
</body>
</html>
4

1 に答える 1

0

最終的に、スクリプトに p3p ポリシー ヘッダーを追加することになりました。そのために、Facebook で使用されている p3p ハックを使用しました。

header('P3P: CP="Facebook does not have a P3P policy. Learn why here: http://fb.me/p3p"'); 

注意すべき重要な点は、P3P によって別のドメインの Cookie にアクセスできるようになったと考えたことです。それは完全に真実ではありません。P3P ヘッダーも設定されている Cookie にのみアクセスできます。私のライブ設定はもう少し複雑で、場合によっては、Cookie が P3P なしでドメイン A に設定され、セカンダリ ドメイン経由では設定されませんでした (私の例の B のように)。この場合、ドメイン B から Cookie を読み取ることができませんでした。

上記の例を変更して、ソリューションを反映させました。もちろん、テキストを適切なものに変更し、コンパクト コードと同等の単語 (LAW、NON など) を誤って使用しないように注意してください。

私の場合、クライアント側の情報のみを保存しているため、これを実行できます。また、それが何であるかさえわかりません。私たちはデータを保存していません。

于 2015-11-13T15:00:32.437 に答える