2011-06-07 98 views
3

背景:Facebook PHP SDK getSession()無法獲得會話。 Cookie問題?

  • 使用Facebook PHP SDK v 2.1.2
  • cookieSupport =真
  • 應用在Facebook上具有的OAuth 2.0畫布啓用在邏輯
  • Facebook連接/符號發生通過HTTPS上的單獨的子域(secure.mysite.com)
  • 開發位點是dev.mysite.com:PORT_NUM

W¯¯帽子工作

  • 我可以成功登錄使用Facebook Connect
  • 通過Facebook對話框授權後,登錄用戶,然後重定向到fbconnect.php它實例Facebook類,並調用$ facebook->的getSession( )
  • 這將返回一個有效的Facebook會話,我們與我們的後登入邏輯進行
  • 我們然後重定向到主頁的簽署

什麼不起作用

  • 任何時間後,$ facebook-> getSession()返回NULL。無論。
  • 根據該文檔,Facebook的應該再生基於cookie的,只要它是有效的有效會話。持續時間被設置爲默認值1小時,但在cookie設置失敗後甚至會在30秒內完成調用。

我想知道是否有fbs_ cookie中的某些內容妨礙了會話後登錄的重新生成。與安全子域相關的東西,或可能是我們在開發網站上使用的端口號?

有很多具有從我所看到的與Facebook會話類似問題的人,但我遇到的建議似乎沒有解決fbs_餅乾,域,港口等內容我瞭解這些事情與cookies的關係是相對較輕的,但我想至少將它們作爲非問題進行檢查,以便我可以在其他地方查看。

欣賞任何見解。

+0

我有類似的isses,但只在某些瀏覽器,並不想重做我的整個登錄過程。到目前爲止,這個http://stackoverflow.com/questions/3955615/how-do-i-get-my-facebook-application-to-automatically-ask-for-required-permission看起來最有希望 – danjp 2011-06-29 01:15:16

回答

0

這個問題帶走了新的Facebook PHP SDK( v3)

2

我也有類似的問題,你和我開始使用類似下面的內容:

function get_facebook_cookie($app_id, $app_secret) { 
$args = array(); 
parse_str(trim($_COOKIE['fbs_' . $app_id], '\\"'), $args); 
ksort($args); 
$payload = ''; 
foreach ($args as $key => $value) { 
if ($key != 'sig') { 
    $payload .= $key . '=' . $value; 
} 
} 
if (md5($payload . $app_secret) != $args['sig']) { 
return null; 
} 
return $args; 
} 
$cookie = get_facebook_cookie(APP_ID, APP_SECRET); 
$me = json_decode(file_get_contents('https://graph.facebook.com/me?access_token='.$cookie['access_token'])); 

if ($me) { 
echo "Hi ".$me->name; 

} else { ?> 
<a href="https://www.facebook.com/dialog/oauth?client_id=<?= APP_ID;?>&redirect_uri=<?= REDIRECT_URI ;?>"><img src="http://static.ak.fbcdn.net/rsrc.php/zB6N8/hash/4li2k73z.gif"><!--Login with Facebook--></a> 

我還包括JS

以下
<div id="fb-root"></div> 
<script src="http://connect.facebook.net/en_US/all.js"></script> 
<script> 
    FB.init({appId: '<? echo APP_ID ?>', status: true, 
      cookie: true, xfbml: true}); 
    FB.Event.subscribe('auth.login', function(response) { 
    window.location.reload(); 
    }); 
</script> 

我用的是像你自己的PHP SDK,但我停止了做它的表面無法正常工作。我注意到,這仍然引發了與cookies相關的錯誤日誌中的一些錯誤,所以它幾乎看起來像依賴於JS首先初始化cookie。 SDK的第3版現在可用,所以這可能會有所幫助。唯一的區別是我必須手動調用我想要的圖形對象上的file_get_contents,但它應該很容易編寫一個函數或類來爲你做這件事

+0

謝謝湯米。我會試試這個。 – byron 2011-06-30 05:58:44