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.