2011-02-01 7 views
0

このトピックは広範にカバーされていますが、私は完全に固執しており、方向性や新しい意見が必要です。私はIE6,8、Safari、Chrome、FFなどで完璧に動作するFacebook iFrameアプリケーションを持っています。IE7だけが私に悲しみを与えます。Facebook iFrameアプリケーション - IE7はクッキーを許可していません

私はP3Pポリシーファイルとその関連XMLファイルを作成しました。このポリシーは、P3Pポリシーバリデーターで完全に検証されます。

Facebook内からiFrameが読み込まれると、赤目アイコンが表示され、クリックすると、iFrameのドメインからのCookieがブロックされていることが報告されます。私はデフォルトの「中」プライバシー設定がIE7に設定されていることを確認しました。興味深いことに、Googleアナリティクスを削除すると、ページはCookieをブロックすることなく最初に読み込まれますが、ページがリロードされるか、ユーザーがログインするとすぐにP3Pヘッダーがすぐに送信されますページ。すべてのアセットはS3経由で送信されるため、そこには問題はありません。

FYI、ここに私のP3Pファイルがあります。私は絶対パス、相対パス、CPとpolicyrefの順番を入れ替えてみました。そして、2つを別々のヘッダコールに分けて運がないようにしました。

header('P3P: CP="NON DSP TAIa PSAa PSDa OUR IND UNI", policyref="/w3c/p3p.xml"'); 

私は、P3Pヘッダーがブラウザによって送受信されていることを確認しました。 HTMLページにMETA p3pタグを追加しました。リダイレクトをすべて削除しました。それでも問題は解決しません。私はこれを調べるのに多くの時間を費やしましたが、今はアイデアがありません。これを新鮮な視点からどのようにアプローチするかについての考えやアイデアは非常に高く評価されます。私はNGINX上でPHP 5.3.5を使用しています。フレームワークを使用していません...

答えて

0

私は同じ問題がありました。 Facebook iframeアプリはIE7を除くすべてのブラウザで素晴らしい機能を果たしました。あなたが最初にアプリに行ったとき、それはうまくロードされました。しかし、リンクをクリックすると、ページは大丈夫ですが、1秒後にブラウザが更新され、リダイレクトされます。最後に空白のページがあります。赤い目のアイコンでクッキーをブロックしていました。

犯人はjavascriptのLIBのFacebookをロードするJavaScriptコードであることが判明:

FB.init({ 
      appId : '<?=FACEBOOK_APP_ID?>', 
      status : true, // check login status 
      cookie : true, // enable cookies to allow the server to access the session 
      xfbml : true // parse XFBML 
     }); 

私は、ステータスを変更し、問題解決するには:真、状態に:偽を。リンクをクリックすると、ページが読み込まれ、更新されません。

だから、いただきました!本当に私はわからないが、私は推測が...リダイレクトがFBは、ログイン状態をチェックjavavascriptによって引き起こされ、ユーザがログアウトした考え何らかの理由などにリダイレクトされていた持ってここで起こっログインページ。私が推測するサーバー側のログインスクリプトは、あなたが本当にログインして、あなたをアプリケーションにリダイレクトしたことを確認します。そうである。

IE7のiframe内に設定されているCookieが設定されていないという問題が残っているため、悪意が残ります。しかし、あなたのiframe内のリンクが親ウィンドウtarget = "_ top"を参照する限り、Facebookのキャンバスページを指しているので、とにかくクッキーは必要ないと思われます。 PHP SDKは、$ _REQUESTで始まるいくつかの場所でセッションを探します。私はfacebookがiframeをロードするとき、それがクエリ文字列のセッションparamを含んでいると推測しています。だから、iframeを通じてIE7でクッキーが動作しなくても、サーバースクリプトは依然としてクエリのパラメータからそれらを取得します。

私は何らかの感覚を覚えていますが、私はそれを完全には得られませんが、私のアプリケーションを修正しました。

+0

こんにちはPeter:非常に興味深い、あなたの説明に感謝します。残念ながら、私たちのリクエストはAJAX経由で行われているため、ハードリフレッシュはオプションではありません。最終的には、必要なデータをJSONオブジェクトに格納し、有効なセッションがあれば送信時にそのデータを検証し、そうでなければ(つまり7)データを送信しました。アプリは短時間しか生存していなかったので、データの改ざんをあまり懸念していませんでした。 また、無効なセッションをブロックするためにJS SDKを使用しています(FBステータスCookieはドメインを通じて管理されているため、唯一の方法です)。 – Tyler

0

これは私のアプリの魅力のように働いたが、多分これが助けになるだろう。

header('P3P: CP="CAO PSA OUR"'); 
ob_start(); 
session_start(); 
関連する問題