2012-07-26 70 views
0

,因爲在過去一年中很多東西的Facebook所做的所有修改都改變了。 網上有一些解決方案,但他們不再工作。 (喜歡這一個:Using the PHP or JavaScript Facebook SDK, how can I keep the user logged in to my website?與PHP Facebook的自動登錄連接+ JS

我已經在我的網站上實現了Facebook連接與PHP的Facebook的SDK。 問題是與已經批准了我的應用程序,並且還登錄到他們的Facebook用戶。 在這種情況下,我希望他們自動登錄,無需再次按下連接按鈕。 我猜想,有一種方法使用PHP + JS做,但我怎麼也找不到,相信我,我試過幾件事情。問題是,PHP的用戶檢查

$user = $facebook->getUser(); 

不認可的Facebook會話,我想,也許我可以用JS觸發它。 所以我累了添加此代碼爲JS網頁和ALRETS正在說用戶已連接,但沒有會話傳遞給PHP,所以PHP SDK無法識別用戶連接:

<div id="fb-root"></div> 
    <script> 
     window.fbAsyncInit = function() { 
     FB.init({ 
       appId : '<?=FACEBOOK_APP_ID?>', 
       status : true, // 
       cookie : true, // 
       xfbml : true, // 
       oauth : true 
     }); 

     // Additional initialization code here 
//--------> this isn't need to work its only a check 
FB.getLoginStatus(function(response) { 
    //console.log(response); 
    if (response.status === 'connected') { 
     var accessToken = response.authResponse.accessToken; 
     alert(accessToken); 
    } else if (response.status === 'not_authorized') { 
     //login function 
    } else { 
     //login function 
    } 
}, true); 

FB.Event.subscribe('auth.authResponseChange', function(response) { 
    //console.log('The status of the session changed to: '+response.status); 
    alert(response.status); 
}); 

//--------> END OF CHECK!! 
     }; 
     // Load the SDK Asynchronously 
     (function(d){ 
     var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0]; 
     if (d.getElementById(id)) {return;} 
     js = d.createElement('script'); js.id = id; js.async = true; 
     js.src = "//connect.facebook.net/<?=$fb_api_lang?>/all.js#xfbml=1"; 
     ref.parentNode.insertBefore(js, ref); 
     }(document)); 
    </script> 

,如果有人發現了一個解決這個問題,並可以分享它將非常感激。

回答

1

的問題是,PHP的用戶檢查$user = $facebook->getUser();不認可的Facebook會話

當然那麼它不能 - 因爲服務器端,它只能訪問用於設置的Cookie您域。但是,如果用戶不在該網域並與Facebook進行互動,Facebook無法爲您的網域設置Cookie。

,我想,也許我可以用JS觸發它。

只需嵌入JavaScript SDK,對其進行初始化並設置cookie: true參數。這將使得JS SDK將網域下一個cookie,它PHP可以在下一次請求閱讀

如果你想認識一個老用戶「立即」,那麼你就必須檢查客戶端對於這一點,並在適當的條件得到滿足,一旦重新載入網頁:JS SDK公認的老用戶(FB.getLoginStatus),但PHP沒有認出他(讓你的PHP代碼設置一個變量/標誌,你的JS可以評估) - 然後通過JS重新加載頁面,以便PHP可以讀取客戶端JS剛設置的cookie。

+0

我試着你說的是什麼該但並不working- '

' – timziv 2012-07-26 16:03:11

+0

你能否代碼爲編輯添加到您原來的問題可讀性更好?謝謝! – CBroe 2012-07-26 16:08:09

+0

完成,看看。 :\(順便說一句謝謝) – timziv 2012-07-26 16:23:13

0

你執行正確:

$facebook = new Facebook(array(
    'appId' => $app_id, 
    'secret' => $app_secret, 
    'cookie' => true 
)); 

調用此方法之前?你使用相同的域名?

+0

YES ...(和登錄工作完美,它只是自動登錄不起作用,長時間離開網站的用戶將不得不再次點擊連接) – timziv 2012-07-26 15:25:53