bir iframe uygulamasından Facebook oturumunu Yenileniyor

oy
13

Tamamen dış olan bir Facebook iframe uygulama var. Bununla bir kullanıcı uygulamayı yüklemek için tuval URL erişir kez iframe uygulamasında tüm bağlantıları benim sunucularına gidin ve kullanıcı Facebook'ta başka bir yere gider ve geri gelir sürece tuval sayfa yenilenir geçmez (veya anlamına ) bir tarayıcı yenileme yapar.

Facebook iframe oluşturan uygulamanın ilk yükleme günü, bana facebook kullanıcı dayalı bir iç uygulama oturumu oluşturmanıza olanak sağlar fb_sig_user gibi bilinen tüm parametrelerini geçmiş olsun. Bu uygulama oturumu (olduğunu değil Facebook oturumu, bu benim kendi uygulama oturumu var) Ben kullanıcı uygulaması ile çalışmasını sağlamak için gereken tek şey.

Sorun bir saat sonra geliyor. kullanıcı bilgisayarı bırakır ya da bir saatten fazla uygulamayı kullanıyorsa, Facebook oturumu sona eriyor. Orada getirilirken arkadaşı bilgilerini gerektiren bazı uygulama sayfalarında, ve FB oturumu sona erdiğinde, bu sayfalar gibi hataları atma, kırmak Hata: geçersiz veya artık geçerli Oturum tuşu.

Benim sorum bir saat sonra zaman aşımına uğramasını tutmak için bir iframe uygulama içinden kullanıcının Facebook oturumunu yenilemek için bir yol var olup olmadığıdır. Bunu yapmak API çağrıları herhangi musunuz? şey ping bir Facebook Bağlan hile var mı? canlı tutmak için herhangi bir kesin bir yöntem var mı? Ben özellikle bu konuya yönelik örnekler bulmak mümkün olmamıştır.

Oluştur 07/05/2009 saat 18:38
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
21

Zafer benimdir!

Ben buldum iframe oturumları ile uğraşan neredeyse tamamen belgesiz Facebook özelliği vardır için belirsiz başvuru Araştırmalarımda. Gerçekten ancak ve ancak benim iframe'de çeşitli oturum anahtarları izlerken birkaç saat sonra iyice açıklamaz Bu sayfa neler olduğunu anlamaya ben başardı.

Daha önce, benim iframe app olağan turda alıyordum fb_whateverilk iframe yük oluştuğunda parametreler. Yani benim uygulamada, her istek üzerine bu yapıyordu:

if (isset($_REQUEST['fb_sig_session_key'])) {
    $_SESSION['fb_sig_session_key'] = $_REQUEST['fb_sig_session_key'];
}
if (! empty($_SESSION['fb_sig_session_key'])) $this->facebook->api_client->session_key = $_SESSION['fb_sig_session_key'];

Bu kod alacağı fb_sig_session_keyilk uygulama yüklendiği ve bir yerel içine uzakta sincap olur $_SESSIONAPI ile kullanılmak üzere. Çünkü yerel oturumda saklayarak, gerekli fb_sig_session_keytamamını uygulama iframe yeniden sürece tekrar geçirilen geçmez.

Bu oturum anahtarı bir saat kadar sonra sona yüzden sorunlar oluştu.

Baktıktan sonra belirsiz başvuru sayfasına , bütün inceleyerek başladı $_REQUESTben başlamıştı değişkenleri. Hatta iframe app içindeki bir iç linke, Facebook bazı parametrelere iletmekten isteği değiştirir çıkıyor. Nedense, onlar var tamamen farklı, ama aynı zamanda geçerli her iframe isteğiyle birlikte gelen oturum anahtarını!

Bu parametre Facebook Uygulaması API anahtarına almıştır. Başvurunuz API anahtarı "xyz123" Yani, eğer senin iframe içinde her isteği denilen bir parametre alır xyz123_session_key(gibi yanı sıra diğer birkaç xyz123_expiresve xyz123_user).

Ana oturumda (orijinal için ilişkilendirilmiş son kullanma süresini izledikten sonra fb_sig_session_key) ve bu iframe ile yalnızca oturum ( xyz123_session_key), tünelin sonundaki ışığı belirdi: iframe için tek oturum anahtarı bitiş zamanı aslında bazen güncellenir . Zaman ve nasıl (Ben bir noktada bir Ajax ping varsayıyorum) Ben belirlenmemiş, ama yine de, bu yeniler.

Ben orijinal bekledi fb_sig_session_keysona erecek oturumda, ve benim app emin yeterince arkadaşı ilgili sayfalar hatalar kadar öksürmeye başladı. Bu noktada, yeni iframe için sadece benim yerel olarak depolanmış seans anahtarı anahtarlı xyz123_session_keyve sorun çözüldü. Bu oturumda sadece orijinal olarak iyi çalışıyor!

Yani, benim son kod düzeltme aşağıdaki gibi lokal oturum anahtarını saklamaktır:

$iframeSessionKeyName = $CONFIG['facebook']['apiKey'] . '_session_key';
if (isset($_REQUEST[$iframeSessionKeyName])) {
    $_SESSION['fb_sig_session_key'] = $_REQUEST[$iframeSessionKeyName];
}
else if (isset($_REQUEST['fb_sig_session_key'])) {
    $_SESSION['fb_sig_session_key'] = $_REQUEST['fb_sig_session_key'];
}
if (! empty($_SESSION['fb_sig_session_key'])) $this->facebook->api_client->session_key = $_SESSION['fb_sig_session_key'];

Bu "iframe okunur" tuşu öncelik verir.

Düzenleme: Benim asıl varsayım "iframe okunur" anahtar Ajax yönteminin çeşit yoluyla güncellendi o bu değerler Facebook tarafından bir çerez içine ayarlanır çıkıyor, yanlış oldu. Bu çerezleri kullanılırken bu bazı alanlar arası problemlere yol açar. Bir ayarlama P3P çerez politikasını Safari hariç çoğu tarayıcı ile bu hafifletir. Safari için iyi Geçici hala yoktur.

Cevap 08/05/2009 saat 00:32
kaynak kullanıcı

oy
2

Sadece koy

header('P3P: CP="CAO PSA OUR"');

ve sayfanın üst kısmında, iç çerçevenin içinde oturumu kaybetmezsiniz.

Ben de bu iş parçacığı iyi 2 buçuk yaşında olduğunu fark ettiniz. Sadece tökezledi Google'ı kullanıyor. Belki benim sonrası bu rastlar başkası yardımcı olacaktır.

Cevap 28/01/2012 saat 11:46
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more