5

私は過去 1 日半の間問題に取り組んできましたが、まだ解決策を見つけていません。

Facebook (Facebook の iFrame にある) で私のゲームにアクセスすると、php セッションが機能しません。これは IE と Safari 用です。クロムは正常に動作します。

この問題に関するスタック上のすべての投稿を既に読みましたが、これはサードパーティの Cookie セキュリティに起因しているようで、最初に iFrame とのやり取りが必要です。最初に iFrame にいくつかのフォーム データを投稿する JavaScript を作成することによる回避策がありましたが、これは機能しなくなったため、ごく最近のブラウザーの最新バージョンで「修正」されたようです。

最初に (iFrame 内の) リンクをクリックしてセッションを作成する別のページをロードする必要がある開始ページを実装しようとさえしました。しかし、それでもうまくいきません。

また、javascript を使用して iFrame に新しいページをロードすることにも問題があり、常に無限ループの更新が発生するようです。

いいえ、P3P ヘッダーはそれを解決しません。

誰でもこの問題の解決策を持っていますか? いくつの Facebook アプリが存在するかを考えると、私だけではないはずです!

4

2 に答える 2

5

「サードパーティの Cookie を受け入れる」が無効になっているクライアントを使用して、この問題に遭遇しました。私の解決策は、各ページの先頭に次の行を配置して、PHP にセッション ID を URI に埋め込むように強制することでした。

ini_set('session.use_trans_sid', true);

URL は Facebook 内の iframe にあるため、SID は上部ウィンドウに表示されません。

于 2012-06-14T17:48:05.150 に答える
3

IE の場合、P3P ヘッダー セットが必要です。何かのようなもの:

<?php header('P3P: CP="CAO PSA OUR"'); ?>

Safari は、デフォルトでサードパーティの Cookie をブロックします。現在、私にとって有効な唯一の回避策は、新しいウィンドウを「ポップアップ」して Cookie を設定することです。私はこのようなものを持っています:

<script type="text/javascript">
    function safariFix(){
        if (navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1){
            window.open('https://yourdomainname.com/safari.php', 'Safari Fix','width=100,height=100');
        }
    }
</script>

そして、safari.phpには次のようになります。

<?php 
setcookie("safari_test", "1");
?>
<!DOCTYPE html>
<html lang="en">
    <head>
        <title>Safari Fix</title>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> 
    </head>
    <script type="text/javascript">
    $(document).ready(function(){
        window.close();
    });
    </script>
    <body>
        Since Safari does not accept third-party cookies by default, we are forced to open this window.
        This window will automatically close once we have set the cookies.
    </body>
</html>

問題:ユーザーが Safari で「ポップアップのブロック」を有効にしている場合、これは機能しません。誰かがこれに対するより良い解決策を持っている場合は、私に知らせてください;)

于 2012-08-09T23:23:11.173 に答える