2010-12-17 8 views
7

Facebookのアプリを開発中です。 Stragnly、アプリはほとんどのブラウザでうまく動作します(私はFF、クロム、サファリでテストしましたが、すべてのブラウザで正常に動作しました)。私はIE8で試験したときのいずれかのページへのAJAX呼び出しをしようとしたときにしかし、私はこのエラーメッセージを受信:Facebookアプリは、IE8ではなく、すべてのブラウザで動作します。

Fatal error: Uncaught Exception: 102: Requires user session thrown in 
/home1/website/public_html/facebook/src/facebook.php on line 515 

これはfacebook.phpにライン515が含まれているよりも機能です:

protected function _restserver($params) { 
    // generic application level parameters 
    $params['api_key'] = $this->getAppId(); 
    $params['format'] = 'json-strings'; 

    $result = json_decode($this->_oauthRequest(
    $this->getApiUrl($params['method']), 
    $params 
), true); 

    // results are returned, errors are thrown 
    if (is_array($result) && isset($result['error_code'])) { 
    throw new FacebookApiException($result); 
    } 
    return $result; 
} 

私の推測では、それはセッションやIE8の設定のどちらかで行うべきことですが、この問題の解決方法はわかりません。

答えて

22

は、あなたのPHPファイルの上にこのヘッダーを追加してみてください:

<?php 
    header('p3p: CP="NOI ADM DEV PSAi COM NAV OUR OTR STP IND DEM"'); 
?> 

これはクロスドメインを行いますAJAXはIEで仕事を呼び出す

EDIT:長い正解実際

IFrameキャンバスアプリ(または他のiFrameを開発するときは、 (デフォルトのIE設定)では、Cookie(サードパーティのCookieと呼ばれます)へのアクセスが制限されています。 Firefox、Chrome、Safari、Operaはすべて正常に動作しますが、IEはこのCookieへのアクセスをブロックします。このヘッダー(これはP3P Compact Privacy Policyと呼ばれます)が存在すると、IEは異なるドメインのCookieを受け入れるようになります。

これはどのようにセッションコードを動作させるのですか?

サーバー内のセッション情報を参照すると、ページはクライアントに格納されているセッションCookieを発行します。 iframeがセッションを使用している場合は、ブラウザによってCookieを保存する必要があります。

クッキーを保存しないと、セッションが失われ、セッションベースのコードがあなたの投稿したように失敗することを意味します。

これが役に立ちます。

PS:BTW p3pヘッダー内のすべての奇妙な頭字語が何を意味するのかわかりません。私は多くのバリエーションを見てきましたので、少し詳しく調べてください。

+2

ワウ。これは確かに1つの魔法のラインです。それは完璧に機能しました(IE8を閉じて開いてAjaxメッセージをリフレッシュする必要がありました)。このラインは何をしていますか? – khr2003

+0

答えを編集して何を説明するのですか –

+2

ありがとうございます。私はいくつかの研究を行いました。ここでは奇妙な頭字語を説明するリンクがあります:http://www.p3pwriter.com/LRN_111.asp – khr2003

0

Microsoftの.netプラットフォームで実行している場合は、IISでP3Pヘッダーを設定できます。

次のリンクを参照してください。ただし、ポリシーXMLファイルを作成する必要があるということを省略し、ヘッダーを追加することができます。

http://support.microsoft.com/kb/324013

+0

P3Pヘッダーを追加するとすべてのCookieの問題が解決されるとは考えないように注意したいと思います。IEの一般的なシナリオを回避しますが、サードパーティのCookieが明示的に無効になっている場合(ブラウザーのセキュリティ設定またはアドオンCookieマネージャーのいずれかによって)、P3Pヘッダーが存在しても差は生じません。 iframeアプリでCookieを使用することで、いつでもどこかで数人のユーザーを失うことになります。うまくいけば、多くはないが、常にいくつか。それが受け入れられない場合は、クッキーを使用しないでください。 –

関連する問題