विजय मेरा है!
iframe के सत्र के साथ काम कर एक लगभग पूर्ण undocumented फेसबुक सुविधा, कि मैं अपने अनुसंधान के क्षेत्र में एक vague reference to पाया जाता है। यह पृष्ठ वास्तव में इसे अच्छी तरह से समझा नहींता है, और मेरे आईफ्रेम में विभिन्न सत्र कुंजी देखने के कई घंटों के बाद ही मैं यह पता लगाने में सक्षम था कि क्या हो रहा था।
पहले, मेरा आईफ्रेम ऐप प्रारंभिक iframe लोड होने पर fb_whatever
पैरामीटर के सामान्य दौर को प्राप्त कर रहा था। तो अपने आवेदन में, मैं हर अनुरोध पर इस कर रहा था:
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'];
इस कोड को प्रारंभिक एप्लिकेशन लोड पर fb_sig_session_key
प्राप्त होगा, और मैं इसे दूर API के साथ उपयोग के लिए गिलहरी हैं एक स्थानीय $_SESSION
में। स्थानीय सत्र में इसे संग्रहीत करना जरूरी है, क्योंकि fb_sig_session_key
तब तक कभी नहीं पारित हो जाता है जब तक कि आप संपूर्ण ऐप iframe को फिर से लोड न करें।
तो समस्याएं तब हुई जब इस सत्र कुंजी को एक घंटे या उससे भी अधिक समय समाप्त हो गया।
vague reference page को देखने के बाद, मैंने सभी $_REQUEST
वेरिएबल्स की जांच शुरू कर दी। यह पता चला है कि आपके आईफ्रेम ऐप के अंदर एक आंतरिक लिंक पर भी, फेसबुक कुछ मानकों के साथ पास करने के अनुरोध को संशोधित करता है। किसी कारण से, उनके पास पूरी तरह से अलग है, लेकिन यह भी सत्र कुंजी मान्य है जो प्रत्येक आईफ्रेम अनुरोध के साथ आता है!
इस पैरामीटर का नाम आपके फेसबुक एप्लिकेशन एपीआई कुंजी के नाम पर रखा गया है। इसलिए यदि आपकी एप्लिकेशन एपीआई कुंजी "xyz123" है, तो आपके आईफ्रेम के अंदर प्रत्येक अनुरोध को xyz123_session_key
(साथ ही कुछ अन्य, जैसे xyz123_expires
और xyz123_user
) नामक पैरामीटर प्राप्त होता है।
मुख्य सत्र (मूल fb_sig_session_key
) और इस iframe-केवल सत्र (xyz123_session_key
) के लिए जुड़े समाप्ति समय देखने के बाद, सुरंग के अंत में प्रकाश दिखाई दिया: iframe-केवल सत्र कुंजी समाप्ति समय वास्तव में हो जाता है कभी-कभी अपडेट किया गया। मैंने यह निर्धारित नहीं किया है कि कब या कैसे (मुझे लगता है कि यह किसी बिंदु पर एक अजाक्स पिंग है), लेकिन फिर भी, यह ताज़ा हो जाता है।
मैं समाप्त होने के लिए मूल fb_sig_session_key
सत्र का इंतजार कर रहा था, और सुनिश्चित करें कि मेरे ऐप में मित्र-संबंधित पृष्ठों ने त्रुटियों को खांसी शुरू कर दी है। उस बिंदु पर, मैंने अपनी स्थानीय रूप से संग्रहीत सत्र कुंजी को नए आईफ्रेम-केवल xyz123_session_key
पर स्विच किया, और समस्या हल हो गई। वह सत्र बस मूल के साथ ही काम करता है!
$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'];
यह "आइफ्रेम केवल-" कुंजी को प्राथमिकता देता है:
तो, मेरा अंतिम कोड ठीक इस प्रकार सत्र कुंजी स्थानीय रूप से संग्रहीत करने के लिए है।
संपादित करें: मेरी मूल धारणा है कि "iframe-only" कुंजी किसी प्रकार की अजाक्स विधि के माध्यम से अपडेट की गई थी, यह पता चला कि ये मान फेसबुक द्वारा कुकी में सेट किए गए हैं। इन कुकीज़ का उपयोग करते समय इससे कुछ क्रॉस-डोमेन समस्याएं होती हैं। P3P cookie policy सेट करना सफारी को छोड़कर, अधिकांश ब्राउज़रों के साथ इसे कम करेगा। सफारी के लिए अभी भी कोई अच्छा काम नहीं है।
ऐसा लगता है कि यह विधि कुकीज़ का उपयोग करती है, इसलिए सफारी को इसके साथ कुछ कठिनाई है, क्योंकि कुकीज़ क्रॉस-डोमेन हैं। – zombat
ठीक है, अजाक्स के माध्यम से आप केवल निम्नलिखित पृष्ठों पर सहेज सकते हैं और इसे निम्नलिखित सभी पृष्ठों पर डीबी से पुनर्प्राप्त कर सकते हैं - अगर मुझे आपका समाधान सही लगता है। बेशक इसे एफबी उपयोगकर्ता आईडी के साथ कुंजी के रूप में सहेजना होगा, लेकिन यह अभी भी प्राप्त करने में सक्षम होना चाहिए या? क्रॉसडोमेन कुकी समस्या के कारण, मैं डेटाबेस और अजाक्स के माध्यम से लगभग हर चीज को हल कर रहा हूं। वैसे भी इस मामले में आपकी जांच के लिए अंगूठे, यह वह जानकारी है जिसे मैं ढूंढ रहा हूं :-) – SamiSalami
ऐसा लगता है कि यदि आप सत्र समाप्त हो गए हैं, तो शायद आप उपयोगकर्ता को प्राप्त नहीं कर पाएंगे, तो शायद आप पुराने फैशन का उपयोग कर सकें अपने ऐप के माध्यम से छुपा इनपुट में रास्ता और पोस्ट ... निश्चित रूप से बदसूरत समाधान, लेकिन काम करना चाहिए और मैं उस के साथ जाने की कोशिश करूंगा। – SamiSalami