2010-12-22 12 views
7

Kullanıcı oturum açma durumunu almak için iframe facebook uygulamasında Facebook php-sdk kullanıyorum. Facebook Hesabı> Oturumu Kapat bağlantısını kullanarak oturumu kapattıktan hemen sonra oturum henüz yok edilmedi. Eski oturumun süresi dolmadan önce birkaç dakika beklemeliyim, ardından uygulamam doğru giriş durumunu alacak.Facebook API - Oturum hala kullanıcı oturumu kapattıktan sonra var

Facebook'un, kullanıcı çıkış yaptığında kendini ve oturumu öldürmesini beklerim. Seansı nasıl manuel olarak öldürebilirim? ÇÖZÜLDÜ

$initParams = array(
    'appId' => $conf['app_id'], 
    'secret' => $conf['secret_api_key'], 
    'cookie' => TRUE, 
); 

$fb = new Facebook($initParams); 
$fb->getSession(); // will return a session object eventhough user signed out! 

: kullanıcı daha önce çıkış yapmış olup olmadığını

$fb->api('/me') çağıran oturumu yok edecek

İşte benim kodudur. ben aşağıdaki gibi kodumu değiştirdik: API çağrısı başarısız

if ($session) 
{ 
    try 
    { 
     $fbuid = $fb->getUser(); 
     $me = $fb->api('/me'); 
    } 
    catch(FacebookApiException $e){} 
} 

ise $session NULL'A ayarlanacaktır. Çok garip davranış, burada olan her şeyi açıklamıyorum ama getSession() yöntemi ile güncellenmeyen artık oturum nesnesine sahip olma problemimi çözdüm.

+0

ise logout url linki doğru bir şekilde oluşturulduğunda kodunuzla ilgili bir sorun yaşanmaz .. ön uç sayfanızı bize gösterebilir misiniz? – ifaour

+1

Bence bu yorumlarda açıkça belirtildiği gibi garip bir davranış olduğunu düşünmüyorum [burada] (https://github.com/facebook/php-sdk/blob/master/examples/example.php) _Bunu bilmiyor muyuz – ifaour

+0

oturumunu kullanarak bir API çağrısı yapana kadar hala geçerli, örnek kodun yorumlarını düzgün okumayan kötüyüm. Girişiniz için teşekkürler. – flochtililoch

cevap

0

Facebook oturumu ait olduğunu hesabından oturumu ilişkisini gerekir. Bunu yaptıktan edilip edilmediği kontrol Facebook'ta :: GetUser() kullanabilirsiniz:

if ($fb->getUser() === null) { 
    // User logged out 
} else { 
    // User logged in 
} 
+2

getUser() yöntem kodu, getSession() yöntemini temel alır. Oturum, standart bir facebook oturumu kapatıldıktan sonra hala var. public function getUser() { $ session = $ this-> getSession(); $ oturumunu geri mi veriyor? $ session ['uid']: null; } – flochtililoch

0

yapmanız herhangi bir şekilde çalışmıyor JavaScript'i <a href="/logout/" onclick="FB.logout();">Logout</a>

+1

Eğer sanırım ben kendim de oturumu bit tutuyordu eğer işe yarar, ama ben oturum açma facebook oturum kapatma menü – flochtililoch

0

çıkış yap kullanılarak $facebook->setSession(null) veya deneyin.

Bu bağlantıyı, facebook'a giriş yaptıktan sonra tarayıcınızda göndermeyi deneyin. gerçekleşmesi Ne

https://www.facebook.com/logout.php

? seni facebookuna götürür. Hiç çıkış yok. Hiç, işlevini kontrol edebilirim ne

handleLogout (API'nızdan bağlıdır) ve çıkışını kontrol ediniz. Benim durumumda, tüm facebook html sayfasını döndürür.

1

loginwindow (AS3) bir yerlerde formatData fonksiyonunu bulma deneyin ve bu satırı bulun:. Giriş yaptığında http://www.facebook.com/ değeri ve bu html sayfasından çıkış

vars.redirect_uri = FacebookURLDefaults.LOGIN_SUCCESS_URL 

Değiştir

Bu olduğunu son kullanıcı değil, geliştiriciyseniz, geçici çözümü.

7

Ben $ FB- kullanıyorum> GetUser() ve Yaptığımın sizinkiyle neredeyse aynıydı.

if ($fb->getUser()) 
{ 
    try 
    { 
     $me = $fb->api('/me'); 
    } 
    catch(FacebookApiException $e){ 
     **$fb->destroySession();** 
    } 
} 

Ben FB değil bazen çıkış yapmış veya olup olmadığını kontrol etmek için tek API kullanarak tutarsız olduğunu tespit ettik, ancak destroySession() ile, oturum mutlaka yok edilecektir. Eğer giriş sayfasındaki çağrıları FB.INIT javascript kullanıyorsanız

+2

tarafından yapıldığı zaman söylemek için hiçbir yolu yoktur, ama başarısız oldu .. kullanıcı onun/onun facebook (uygulamadan) $ fb-> getUser() hala uid verir. Yeni bir kullanıcı Facebook'a giriş yapsa bile, $ fb-> getUser() hala eski kullanıcı kimliğini döndürür. –

0

ben bu sorunu çözmek için başardınız tek yolu kullanıcı kimliğini kontrol etmek imzalı isteği kullanarak oturumu temizleyerek oldu:

$facebook = Membership::getFacebookApp(); 
$signed_request = $facebook->getSignedRequest(); 
if(isset($_SESSION['facebook_id']) && $signed_request['user_id'] != (int)$_SESSION['facebook_id']){ 
    $_SESSION = array(); 
} 
İlgili konular