2013-09-26 70 views
-1

當我登錄我的應用程序使用Facebook的SDK我得到的Facebook用戶ID,但一段時間後,它會自動被破壞。這經常發生。我需要不時刷新頁面。任何人都可以幫助我找到解決方案,爲什麼發生這種情況?我使用JavaScript和PHP sdk。我已經搜索了相同的,但我沒有得到任何適當的解決方案。facebook會話在我的應用程序中經常被破壞?

PLZ有人能幫我解決這個...

這裏是我使用的登錄代碼:

<div id="fb-root"></div> 
     <script> 
      window.fbAsyncInit = function() { 
       FB.init({ 
        appId: '<?php echo $facebook->getAppID() ?>', 
        cookie: true, 
        xfbml: true, 
        oauth: true 
       }); 
       FB.Event.subscribe('auth.login', function(response) { 
        window.location.reload(); 
       }); 
       FB.Event.subscribe('auth.logout', function(response) { 
        window.location.reload(); 
       }); 
      }; 
      (function() { 
       var e = document.createElement('script'); 
       e.async = true; 
       e.src = document.location.protocol + 
         '//connect.facebook.net/en_US/all.js'; 
       document.getElementById('fb-root').appendChild(e); 
      }()); 
      function loginfb() 
      { 
       FB.login(function(response) { 
        if (response.authResponse) { 
         //alert('Success!'); 
        } else { 
         //alert('Login Failed!'); 
        } 
       }, {scope: 'manage_pages,publish_actions,email'}); 
      } 
      (function(d, s, id) { 
       var js, fjs = d.getElementsByTagName(s)[0]; 
       if (d.getElementById(id)) 
        return; 
       js = d.createElement(s); 
       js.id = id; 
       js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=<?php echo APP_ID_KEY; ?>"; 
       fjs.parentNode.insertBefore(js, fjs); 
      }(document, 'script', 'facebook-jssdk')); 

這裏是我使用來獲取Facebook的用戶ID的PHP代碼:

require_once('facebook.php'); 


$facebook = new Facebook(array(
    'appId' => APP_ID_KEY, 
    'secret' => APP_SECRET, 
)); 

$site_url = CALLBACK_URL; 
// Get User ID 

$user = $facebook->getUser(); 


if ($user) { 
    try { 

     // Proceed knowing you have a logged in user who's authenticated. 
     $user_profile = $facebook->api('/me'); 
     $friends = $facebook->api('/me/friends'); 

    $token=$facebook->getAccessToken(); 

    } catch (FacebookApiException $e) { 
    error_log($e);`enter code her`enter code here`e` 
    $user = null; 
    } 
} 

現在,當我登錄了我第一次獲得的Facebook用戶ID,但自動一段時間後,就變成零,所以我需要再次點擊登錄按鈕來獲取用戶IDŧ他正在發生非常頻繁和它很討厭..

+0

您應該添加一些代碼示例,它總是幫助 –

回答

0
  1. 會話垃圾收集器刪除會話文件,如果沒有被修改
  2. 也許你正在使用壽命短的訪問令牌,所以當你調用FB API收到例外,FB會話將被清除
  3. 我有問題,使用JS和PHP SDK現場,PHP正在演繹JS餅乾(共享會話==假的,JS AUTH您收到壽命短的訪問令牌),我在JS diseabling餅乾解決它在裏面。

PS檢查什麼Facebook的例外是說

+0

我嘗試在JS初始化設置cookie:false,但現在我無法登錄,我也沒有獲得用戶ID。奇怪,它不會給我登錄時的任何錯誤,但登錄後,頁面不重定向。當我把餅乾:真正的正常工作 –

+0

是becouse您是通過JS SDK獲取用戶,所以你必須有共享會話或我做到了阿賈克斯與擴展的訪問令牌JS登錄響應,並設置PHP會話手動調用。 –

+0

我如何設置php會話擴展訪問令牌,我如何獲得擴展訪問令牌? –

0

這是JS側

window.fbAsyncInit = function() { 
    FB.init({ 
    appId  : app_id, 
    status  : true, 
    });   
}; 
(function(d){ 
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;} 
js = d.createElement('script'); js.id = id; js.async = true; 
js.src = "//connect.facebook.net/pl_PL/all.js"; 
d.getElementsByTagName('head')[0].appendChild(js); 
}(document)); 


//callback - function called after succeed login 
//opts - The same opts as in FB.login(). 
function login(callback, opts) 
{ 
    //opts must be an object 
    if (!opts || typeof(opts) !== "object") { 
     opts = null; 
    } 

    FB.getLoginStatus(function(statusResponse) { //check login status 
     if(statusResponse.status === 'connected') { //user logged in 
      if(opts !== null && opts.scope !== null) { 
       //if there is scope opt check that user grant access to all permissions 
       FB.api('/me/permissions?fields='+opts.scope, 'get', {access_token : statusResponse.authResponse.accessToken }, function(response) { 
        var perms = opts.scope.split(','); 
        for(var i=0;i<perms.length;i++) { 
         if(response.data[0][perms[i]] !== 1) { 
          //one of permissions fails - do login and break loop 
          FB.login(function(loginResponse) { 
           if(loginResponse.status === 'connected') 
            proceedLogin(loginResponse.authResponse,callback); //ajax call 
          }, opts); 
          return; 
         } 
        } 

        //every perm is granted, great so let's proceed user login 
        proceedLogin(statusResponse.authResponse,callback);//ajax call 
       }); 
      } else { 
       //there's no opts or no perms to check 
       proceedLogin(statusResponse.authResponse,callback);//ajax call 
      } 
     } else { //user not logged in :(
      FB.login(function(loginResponse) { 
       if(loginResponse.status === 'connected') 
        proceedLogin(loginResponse.authResponse,callback);//ajax call 
      }, opts); 
     } 

    }); 
} 
function proceedLogin(authResponse,callback) { 
    $.post('/ajax/login', authResponse, function(data) { 
     if (data.user && callback && typeof(callback) === "function") { 
      callback(); 
     } 
    }); 
} 

,這是PHP側

function login() { 
    //FB() your facebook instance 
    FB()->setAccessToken($_POST['accessToken']); //set access token from JS 
    FB()->setAccessToken(FB()->setExtendedAccessToken()); 
    $user = FB()->getUser(); 

    echo json_encode(array('user' => $user)); 

}