-1

codeigniter を使用してキャンバスの Facebook ページを作成しています。ユーザーのログイン後、残りの API は ajax ページで動作します。最初のajax呼び出しを行うと、セッションデータを取得できないため、セッションが空かどうかを確認してからページをリロードします。その後、ajaxページでセッションを取得します。そのため、1 回の ajax 呼び出しと 1 回のリロード後にのみ、session_id が修正されます。

ajax 呼び出しを行わずにページを更新すると、毎回セッション ID が再生成されます。

私がやりたいことは、データを最初に 1 回だけ SESSION にロードすることだけです。そして、それを私の ajax ページで使用できるようにします。

更新: IE でのみ発生することを認識しているため、この問題に関するスレッドを見つけました。しかし、解決策は私にはうまくいきませんでした。

ie での facebook キャンバス セッションの問題

header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');

HTACCESS:

php_value session.save_path "/tmp"
SetEnv session.use_cookies='1';
php_value session.gc_maxlifetime 86400
php_value session.cookielifetime 86400
php_flag  log_errors on
php_value error_log  "/PHP_errors.log"

構成:

$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = FALSE;
$config['sess_use_database']    = FALSE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 7200;

コントローラ:

function MyController()
    {
        session_start();
        parent::__construct();
        $this->connectUser();   

    }
function connectUser(){ 
//IF ITS AN AJAX CALL CHECK SESSION AND RELOAD
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
        if (!isset($_SESSION["userid"]) ) {
        echo "AJAX : ".session_id();// the session id on ajax call
        echo "<script type='text/javascript'>
                        window.top.location = 'https://apps.facebook.com/....';
                        </script>";

        }else echo "I have session data on ajax page";

    }
    else{
        echo "PAGE : ". session_id(); // the session id on page load
            if(!isset($_SESSION["userid"])){

                $this->load->library('facebook');                               
                $user = $this->facebook->getUser();

                    if ($user) {
                        try {
                            $data['user_profile'] = $this->facebook->api('/me');

                        } catch (FacebookApiException $e) {
                            $user = null;
                        }
                    }

                    if (isset($data)) {
                        //SET SESSION HERE ....
                        $_SESSION["userid"]=$data['user_profile']["id"];

                    }

                }


        }

}
4

1 に答える 1

0

どの Facebook ライブラリを使用していますか?

Codeigniter は、セッション クラスを介して独自のセッション システムをロールします。たとえば、ネイティブ PHP セッション ($_SESSION) を使用するのではなく、$this->session->userdata など。指定したセッション構成は、Codigniter 独自のセッション実装にのみ関連しています。

これを読んでください:http://codeigniter.com/user_guide/libraries/sessions.html

session_start() の代わりに、設定で「セッション」クラスを自動ロードするか、 $this->load->library('session'); を配置します。コントローラーの上部にあります。

ただし、Facebook PHP SDK (https://github.com/facebook/php-sdk) は実装にネイティブ php セッションを使用しますが、これは抽象化されており、独自のシステムでオーバーライドできます。

FB と Codeigniter の使用例については、Elliot Haughin のライブラリをご覧ください: https://github.com/elliothaughin/codeigniter-facebook

于 2012-06-18T13:46:31.400 に答える