2009-10-22 22 views
3

我不知道是否有一種方法來轉儲所有的CodeIgniter - 我的自定義會話數據被Facebook剝離了嗎?

$this->session->userdata() 

值的,所以我可以解決?

我在Facebook內部工作,並有一個登錄頁面,一旦成功,我想傳遞當前用戶的UID,我認爲這將工作得很好。

我目前擁有的UID設置如下:

require_once 'facebook.php'; 
$appapikey = 'XXXX'; 
$appsecret = 'XXXX'; 
$facebook = new Facebook($appapikey, $appsecret); 
$user_id = $facebook->require_login(); 
$this->db->like('uid', $user_id); 
$this->db->from('users'); 
$has_signed_up = $this->db->count_all_results(); 

if ($has_signed_up == 0) { 
redirect('/setup/signup/', 'location'); 
} 
else { 
$this->session->set_userdata('uid', $user_id); 
redirect('/preferences/index/', 'location'); 
} 

所以重定向發生時,我在首選項/指數在有一個非常簡單的設置:

echo "this is the preferences form <br />"; 
    echo $this->session->userdata('uid'); 
    echo $this->session->userdata('session_id'); 

而結果是不可思議的:

this is the preferences form 
858f500e167e359edc1942a96f3bac35 

因此,它完全跳過包含uid的中間回聲。我沒有正確設置?有沒有辦法轉儲會話數組的所有值來查看正在通過的內容?任何幫助都會很棒。

UPDATE

我已經運行的var_dump($這 - >會話級>用戶數據)在每個原始網站,並通過Facebook。

在網站上公開了包含5個值(session_id,IP,User_agent,last_activity和uid)的數組中的所有設置值。

但是在Facebook Chrome中,它只顯示CodeIgniter設置的4個值。我聽說cookie只能是4k,而且加密可能會成爲問題。 FB可以使用自己的加密(讀取:更大)數據填充cookie嗎?

更新2

當我註釋掉重定向,只是有:

else { 
    $this->session->set_userdata('uid', $user_id); 
    echo ':test_'.$this->session->userdata('uid').'_test:'; 
    //redirect('/preferences/index/', 'location'); 
    } 

它忠實地返回:test_1234_test:在Facebook中。所以在重定向期間,它會丟失數組的這部分(但不是整個數組)。

它可能只是在重定向頁面上創建一個新的會話?所以這就是爲什麼它只有四個「股票」變量?如果是這種情況,我需要研究它是如何創建會話的,以及Facebook是否會清除cookie。

更新3

所以我轉而使用DB,而不是存儲cookie的會話信息,想FB要麼剝奪他們或與他們發生碰撞。我公司目前已在應用程序設置爲

  1. 設置$ USER_ID = 1234
  2. $這個 - >會話級> set_userdata( 'UID',$ USER_ID)
  3. 重定向到新的頁面
  4. 的var_dump在DB會發生什麼情況的所有可能的信息

是這樣的: DB records http://nikolausjj.facebook.joyent.us/Picture2.png

所以它創建於用戶數據記錄良好,然後在重定向後立即創建新會話而不識別先前的會話。有人可以解釋CI框架在哪裏檢查是否存在先前的會話?用戶手冊基本上將其解釋爲「魔術」。

回答

1

您可以使用var_dump()輸出會話。類似這樣的東西

var_dump($this->session); 

set_userdata調用看起來沒問題。你確定$user_id已設置。由於回顯被執行,但uid未設置或設置爲空字符串。

嘗試用

echo ':test_'.$this->session->userdata('uid').'_test:'; 

其他信息更換回聲有助於回答

    您使用的是什麼瀏覽器
  • 你的域名中是否有下劃線_
  • 您是否正在使用CI會話或本地PHPsessions的某些包裝
  • uid的值是否也在註釋掉重定向時丟失/未設置?

其他建議:

  • 嘗試redirect('/preferences/index/', 'refresh');,而不是location
  • 我不熟悉與Facebook的發展,而且是你的控制之下/preferences/index?如果是,請嘗試刪除(如果存在)$this->load->library(‘session’),而將其加載到autoload.php
  • 嘗試改變$config[‘sess_match_ip’]爲'假
  • 嘗試設置$config[‘sess_encrypt_cookie’]爲FALSE
  • 嘗試CI Native session
  • 更換使用CI-會議的是,如果不將其存儲在cookie UID敏感信息。如果它很重要,如果它可以欺騙不要。
+0

所以我已經做到了。當我訪問Facebook以外的頁面時,它顯示了完整的期望數組:array(6){[「session_id」] => string(32)「3ee0c3caea3bf41153ad03f3483c05e5」[「ip_address」] => string(10)「10.19.32.6 「[」user_agent「] => string(50)」Mozilla/5.0(Macintosh; U; Intel Mac OS X 10.5; en「[」last_activity「] => string(10)」1256249601「[」key「] =>但是當我通過Facebook訪問相同的頁面時,它只顯示CI自己設置的4個值(sessid,4個字符) IP,usragent和lastactivity)任何人都知道這些設置是不同的嗎?存儲? – 2009-10-22 22:16:42

+0

我在OS X上同時使用Safari 4.03和FF 3.5.3,所以我只需設置$ user_id = 1234就可以了。當我評論重定向,但不會從會話數組中返回: -/ – 2009-10-22 22:39:08

+0

而且我正在使用一個小時前股票下載的CI會話(所以我沒有把TOO弄得太多) 。沒有_在th e域名。我也做了圍繞重定向頁面上的回聲的測試,它出來了:test__test: – 2009-10-22 22:40:46

0

我沒有解決如何通過Facebook將會話變量從一個頁面傳遞到另一個頁面。我的解決方案只是在每個頁面上再次調用Facebook API來獲取用戶的UID。不是很棒的編程,但它對我來說可行。 : -/