Frissítő Facebook folyamatot egy iframe alkalmazás

szavazat
13

Van egy Facebook alkalmazás, amely iframe teljesen külső. Ez alatt azt értem, hogy ha a felhasználó hozzáfér a vászon URL betölteni az alkalmazást, az összes hivatkozást az iframe alkalmazás megy a szerver, és a vásznon oldal sosem lesz frissül, kivéve, ha a felhasználó megnyit valahol máshol a Facebook-on, és jön vissza (vagy nem a böngésző frissítés).

A kezdeti terhelést az alkalmazás, ahol Facebook teremt az iframe, kapok át a szokásos paraméterek, mint a fb_sig_user, amely lehetővé teszi, hogy hozzon létre egy belső alkalmazás munkamenet alapján facebook felhasználó. Ez az alkalmazás ülésen (ami nem a Facebook ülés, ez a saját app ülés) van szükségem ahhoz, hogy a felhasználó számára, hogy működjön együtt az alkalmazást.

A probléma akkor jön egy órával később. Ha a felhasználó elhagyja a számítógépet, vagy használja az alkalmazást több mint egy óra, a Facebook munkamenet lejár. Vannak olyan alkalmazást mely oldalakon lehívását barátja információt, és amint a FB munkamenete lejárt, ezeket az oldalakat törni, kidobták hibák, mint a „Hiba: Session kulcs érvénytelen, vagy már nem érvényes.”

A kérdésem az, hogy van-e módja annak, hogy frissítse a felhasználó Facebook munkamenetet iframe-en belül kérelmet tartani azt a lejáró egy órával később. Tegye a API-hívásokat ezt? Van Facebook Connect trükk, hogy ping valamit? Van-e a végleges módszer életben tartani? Nem voltam képes megtalálni minden példát, hogy konkrétan ezt.

A kérdést 07/05/2009 18:38
a forrás felhasználó
Más nyelveken...                            


2 válasz

szavazat
21

A győzelem az enyém!

Van egy szinte teljesen dokumentált Facebook jellemző foglalkozó iframe ülések, hogy találtam egy homályos utalást a kutatás. Ez az oldal nem igazán megmagyarázni jól azonban csak néhány óra elteltével figyeljük különböző munkamenetkulcsok én iframe voltam képes rájönni, hogy mi folyik itt.

Korábban én iframe app részesült a szokásos kerek a fb_whateverparaméter, ha a kezdeti iframe terhelés történt. Tehát az én alkalmazás, én ezt minden kéréssel:

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'];

Ez a kód kapna a fb_sig_session_keykezdeti app terhelést, és azt mókus el egy helyi $_SESSIONhasználata az API-t. Tárolja azt a helyi munkamenet van szükség, mert fb_sig_session_keysoha nem kerül át újra, hacsak újra az egész alkalmazás iframe.

Tehát a probléma merült fel, amikor ez a session kulcs lejárt egy órával később.

Miután megnézte a homályos utalás oldal , elkezdtem vizsgálja a $_REQUESTváltozók Kezdtem. Kiderült, hogy még egy belső linket belsejében iframe alkalmazás, Facebook módosítja a kérelem végigvezet néhány paraméter. Valamilyen oknál fogva, hogy van egy teljesen más, hanem érvényes session kulcsot, hogy jön minden iframe kérés

Ez a paraméter neve, mind a Facebook alkalmazás API kulcsot. Tehát, ha az alkalmazás API-kulcs „xyz123”, minden kérés belsejében iframe kap nevű paramétert xyz123_session_key(valamint néhány más, mint a xyz123_expiresés xyz123_user).

Miután megnézte a kapcsolódó lejárati idő a fő ülés (eredeti fb_sig_session_key), és ezt az iframe-csak ülés ( xyz123_session_key), a fényt az alagút végén megjelent: az iframe-only session kulcs lejárati idő valójában frissül időnként . Nem határozza meg, hogy mikor és hogyan (feltételezem, hogy ez egy Ajax ping bizonyos ponton), de mégis, ez felfrissíti.

Vártam az eredeti fb_sig_session_keymunkamenet lejár, és persze elég a barátja kapcsolatos oldalait app kezdett köhög fel hibákat. Ekkor váltottam én helyben tárolt session kulcsot az új iframe-csak xyz123_session_key, és a probléma megoldódott. Hogy a session is ugyanolyan jól működik, mint az eredeti!

Tehát a végső kód fix, hogy tárolja a session kulcsot helyileg az alábbiak szerint:

$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'];

Ez előnyben részesíti a „iframe-only” gombot.

Edit: Az eredeti feltételezést, hogy a „iframe-only” gomb frissítve keresztül valamilyen Ajax módszer rossz volt, akkor kiderül, ezek az értékek vannak beállítva a cookie-Facebookon. Ez néhány domainek probléma, ha ezek a cookie-kat. Beállítása P3P cookie-politika enyhíti ezt a legtöbb böngészővel, kivéve a Safari. Még mindig nem jó munka körül Safari.

Válaszolt 08/05/2009 00:32
a forrás felhasználó

szavazat
2

csak tegye

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

tetején az oldal, és nem fogja elveszíteni a munkamenethez az iframe.

Azt is észrevettem, hogy ez a téma jó 2 és fél éves. Csak botlott használja a Google. Talán a poszt segít valaki másnak, aki átjön ez.

Válaszolt 28/01/2012 11:46
a forrás felhasználó

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