Facebook tabanlı sitesi bağlanmak için tanımlama güncellemek?

1 Cevap php

Ben PHP kullanarak inşa edilmiş bir web sitesinde giriş sistemi için Facebook Connect API kullanıyorum. Bir kullanıcı oturum açmış olup olmadığını belirlemek için basit bir yolu yoktur

$fb = new Facebook($api, $secret);
$fb->get_loggedin_user();  

The above function always returns a user id, once a user has authenticated with the site, even if they sign out of Facebook, it still returns their user id.
I've worked on this for a while, and after looking around, I think the reason it does this is because when a user is authenticated on the site, the Facebook JavaScript API stores cookies that are used to save information about the session.
However, if the user signs out of the regular Facebook session, the cookie is still returning values ,even if the session is no longer valid.
My question is how do I update the cookies so that they don't give me values when the session is no longer valid?

1 Cevap

Bu biraz zor olabilir. Temelde Facebook uygulama kimliği (yani 12345_fb_sig = vb) alanlı olan kullanıcının tarayıcısına çerez bir demet saklar. Bu çerezler kullanıcı Facebook'ta oturum açmış gelmiştir FB Connect uygulaması anlatmak ve facebook oturum kimliği iletmekten kullanılır. Ancak kullanıcı başka bir yere gider ve dışarı açtığında, bu çerezler temizlenecek alamadım, ve kullanıcı daha sonra geri gelirse kadar Connect sitesi ile ilgili olarak, kullanıcı hala oturum ve bununla bir API aramayı deneyin oturum anahtarı, başarısız olur.

Sen PHP FB API istemcisi, $facebook->api_client->clear_cookie_state() için bir sunucu tarafı kütüphane çağrısı bu çerezleri silebilir, ancak, ben bu yöntemi tavsiye etmem. Bu oturum anahtarı hala geçerli olduğunu doğrulamak için her sayfa yük API çağrısı çeşit yapmak gerekir, ve bu yükü bir sürü ekler.

Genellikle, bu işlemek için en iyi yolu, zaten FB Connect kullanan konum FB Javascript kütüphaneleri ile. Sen müşterinin oturum durumu değişti eğer bir sayfa yenileme zorlar FB Connect kurmak için kullanılan FB.init() çağrısına bir parametre ekleyebilirsiniz:

FB.init("<YOUR-API-KEY>", "<YOUR-CROSS-DOMAIN-CHANNEL-URL>", {"reloadIfSessionStateChanged":true}); 

Kullanıcı bir sayfayı yeniden oluyor göreceğimiz gibi, biraz terbiyesiz, ama muhtemelen emin olmak için en iyi yoldur. Ben çok bu teknikler hakkında daha fazla bilgi için Detecting Connect Status wiki sayfasını kontrol öneriyoruz.