2012-06-18 79 views
0

我使用codeigniter構建了一個canvas facebook頁面。用戶登錄後,api的其餘部分與ajax頁面一起工作。當我做第一個Ajax調用時,我無法獲取會話數據,所以我檢查會話是否爲空,然後重新加載頁面。之後,我在ajax頁面中獲得會話。所以只有一個Ajax調用和一個重新加載我的session_id得到修復。會話ID在每次刷新時重新生成

如果我不做任何ajax調用,但刷新頁面,會話id每次重新生成。

我只想在一開始就將數據加載到SESSION一次。並且能夠在我的ajax頁面上使用它。

更新:我意識到它只發生在IE瀏覽器,所以我發現這個問題的線程。但該解決方案並不適合我。

facebook canvas session problems in ie

頭( 'P3P:CP = 「IDC DSP COR ADM德維戴氏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:

$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"]; 

        } 

       } 


     } 

} 

回答

0

哪些Facebook的庫您使用?

Codeigniter通過會話類來滾動它自己的會話系統。例如$ this-> session-> userdata等,而不是使用本地PHP會話($ _SESSION)。您指定的會話配置僅與Codigniter自己的會話實現有關。

閱讀:http://codeigniter.com/user_guide/libraries/sessions.html

而是在session_start()自動加載在你的配置的 「會話」 類的,或將$這個 - >負載>庫( '會議');在你的控制器的頂部。

然而,Facebook PHP sdk(https://github.com/facebook/php-sdk)在其實現中使用了本機php會話,儘管這是抽象的,可以用自己的系統覆蓋。

退房埃利奧特Haughin的圖書館與FB和笨工作的一個例子:https://github.com/elliothaughin/codeigniter-facebook

+0

我第一次使用codigniter會話類當我第一次有這個問題我想笨會議是問題,所以我使用本地會話,但沒有改變。我使用最新的Facebook PHP SDK(v.3.1.1)。另外我加載自動載入庫: $ autoload ['libraries'] = array('database','Template','memcached_library','facebook','session'); –

+0

我試過你建議的圖書館。它在重載循環中被刪除,因爲即使我登錄它也無法到達我的用戶信息。 –