2013-09-26 7 views
-1

После входа в мое приложение с использованием facebook sdk Я получаю идентификатор пользователя facebook, но через некоторое время он автоматически уничтожается. Это происходит часто. Мне нужно обновлять страницу время от времени. Может ли кто-нибудь помочь мне найти решение, почему это происходит? Я использую 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')); 

и здесь код PHP, который я использую, чтобы получить идентификатор пользователя facebook :

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, но после того, как автоматически через некоторое время он становится равным нулю, поэтому мне нужно нажать на кнопку входа, чтобы получить идентификатор пользователя т его происходит очень часто, и его очень раздражает ..

+0

Вы должны добавить образец кода, это всегда помогает –

ответ

0
  1. Session сборщик мусора может удалить файл сессии, если не изменен
  2. Возможно, вы используете короткий доступ жизни лексема поэтому при вызове FB API вы получите исключение где FB session is cleared
  3. У меня была проблема с использованием JS и PHP SDK на сайте, PHP интерпретировал JS-файл cookie (общий сеанс == false, в режиме JS-аутентификации вы получаете короткий токен доступа), и я решил его, заразив cookie в JS в этом.

проверка PS, что Facebook исключение говорит

+0

Я попытался установить cookie: false в JS init, но теперь я не могу войти в систему, и я тоже не получаю идентификатор пользователя. Странно это не дает мне никаких ошибок при входе в систему, но после входа страница не перенаправляется. Когда я храню файл cookie: true, он отлично работает –

+0

Да, потому что вы выбираете пользователя через JS SDK, поэтому вы должны иметь общий сеанс или как я сделал это ajax-вызов с ответом на вход 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)); 

} 
Смежные вопросы