मैं हाल ही में एक ही समस्या करवाते आए हैं, ऐसा लगता है कि अगर 5 मि के बाद या तो निष्क्रियता के आप एक बार पुनः लोड करते हैं, सत्र मौजूद नहीं होता। कभी-कभी यह काम करता है, कभी-कभी ऐसा नहीं होता है।
मैं पिछले सप्ताह के बारे में के लिए इस पर ध्यान देने किया गया है, और एकमात्र समाधान मैं के बारे में सोच सकता है जे एस एसडीके का उपयोग करने के साथ एक पृष्ठ पुनः लोड करने के लिए किया गया था:
FB.Event.subscribe('auth.login', function(response) {
window.location.reload();
});
लेकिन मैं मानता हूँ, यह यूएक्स के मामले में एक बहुत ही सुरुचिपूर्ण समाधान नहीं है। आप PHP एसडीके में cookie
परम, और जे एस एसडीके में OAuth परम पास करना चाहिए, और देखते हैं कि अगर काम करता है (यह मेरे लिए नहीं था):
$facebook = new Facebook(array(
'appId' => $config['facebook']['id'],
'secret' => $config['facebook']['secret'],
'cookie' => true
));
और
FB.init({
appId : appId,
channelUrl : '//domain.com/signon/channel.php',
status : true,
cookie : true,
xfbml : true,
oauth : true
});
अजनबी अभी भी, मैंने गीथब से latest PHP SDK फिर से डाउनलोड किया और इसे एक सैंडबॉक्स वातावरण (अपाचे, PHP 5.4) पर अपलोड किया। मैं उदाहरण भाग गया (जे एस SDK के साथ) के रूप में-है और यह एक ही मुद्दा है!
अब अगर उपरोक्त सरसों काट नहीं आता है, तो मेरे पास कुछ और सुझाव हैं।
एसडीके एक बीआईटी
सबसे पहले बदलने, गुजर
$facebook->getAccessToken();
आप कोई अच्छा अगर $user
रिटर्न 0. करना होगा हालांकि, base_facebook.php
में चारों ओर खुदाई का एक सा करने के बाद, मैंने देखा कि विधि पैरामीटर से प्राधिकरण कोड पुनर्प्राप्त करने के लिए विधि getCode()
वास्तव में $_REQUEST
का उपयोग करती है।
पीएचपी मैनुअल से
, $ _REQUEST
एक साहचर्य सरणी कि डिफ़ॉल्ट रूप से $ _GET, $ _POST और $ _COOKIE की सामग्री शामिल हैं।
लेकिन
यह $ _ पोस्ट या $ _COOKIE $ _GET करने के लिए बहुत अलग है।
यह आपके सेटअप के आधार पर एक बगजर का थोड़ा सा हो सकता है। बजाय, कि इस तरह दिखता है base_facebook.php
में समारोह getCode()
लगता है:
protected function getCode() {
if (isset($_REQUEST['code'])) {
if ($this->state !== null &&
isset($_REQUEST['state']) &&
$this->state === $_REQUEST['state']) {
// CSRF state has done its job, so clear it
$this->state = null;
$this->clearPersistentData('state');
return $_REQUEST['code'];
} else {
self::errorLog('CSRF state token does not match one provided.');
return false;
}
}
return false;
}
और एक नई सरणी/चर में क्वेरी विलय तो जैसे array_merge()
का उपयोग कर $_GET
, $_POST
& $_COOKIE
सरणियों शामिल करने के लिए (यह $code_array
कॉल) :
$code_array = array_merge($_GET,$_POST,$_COOKIE);
क्या आप के साथ अंत एक सरणी कि संबंधित अनुरोधों से सभी डेटा होता है। बस आगे बढ़ो और $code_array
समारोह के अंदर के साथ $_REQUEST
की जगह, यानी
\\replace $_REQUEST with $code_array;
if (isset($code_array['code'])) {
if ($this->state !== null &&
isset($code_array['state']) &&
$this->state === $code_array['state']) { //...and so on for the rest
यह (उम्मीद) अच्छी तरह से काम करना चाहिए।
वैकल्पिक - अपने पहुंच टोकन लाइफटाइम विस्तार
यह वैकल्पिक है, लेकिन मैं फिर भी इसका शामिल थे। अधिकांश नए ऐप्स पहले से ही लंबे समय तक एक्सेस टोकन रहते हैं, लेकिन बस, यदि आप अपने मौजूदा एक्सेस टोकन को बदलने के लिए $facebook->setExtendedAccessToken();
विधि का उपयोग कर सकते हैं।
नोट: आप $facebook->setExtendedAccessToken();
कॉल करने के लिए इससे पहले कि आप वास्तव में getAccessToken()
विधि के साथ अपने पहुंच टोकन प्राप्त की है।
अब, अपने कोड का उपयोग कर आप
$user = $facebook->getUser();
if($user) {
try {
// Just to be sure, add access token to each request
$facebook->setExtendedAccessToken();
$access_token = $facebook->getAccessToken();
// Fetch user details
$user = $facebook->api('/me?access_token='.$access_token);
}
//and so on..
निष्कर्ष
$ _GET में $ _REQUEST तोड़कर, $ _ पोस्ट & $ _COOKIE (भले ही यह भी शामिल है सभी तीन डिफ़ॉल्ट रूप से) लगता होगा सुनिश्चित करें कि हम एसडीके द्वारा सेट की गई कुकी को बहुत परेशानी के बिना ला सकते हैं। मैं कहता हूं क्योंकि बिल्ली, मैं वास्तव में 100% यकीन नहीं कर रहा हूं।
मैंने अपने मामले में काम करने के लिए उपरोक्त विधियों का उपयोग किया, इसलिए मैं कुछ ज्ञान साझा करने की उम्मीद कर रहा हूं, क्योंकि मैं इस समस्या पर बहुत अधिक नींद खो रहा हूं, और एक व्यवहार्य समाधान नहीं मिला।
आशा है कि इससे मदद मिलती है!
संपादित करें: मैं कुछ मैं भी किया था
$user_profile = $facebook->api('/me');
से एपीआई अनुरोध को बदलने
$user_profile = $facebook->api('/'.$user.'?access_token='.$access_token);
लिए किया गया था उल्लेख करना भूल गया, है, और यह एक नई पहल की। :)
बुला '$ फेसबुक> setExtendedAccessToken();' मेरे लिए काम किया है, धन्यवाद। – Eldar
मेरे पास रूट/iframe विजेट्स/साइट्स पर साइट के साथ एक ऐप था। आधार फेसबुक में अपने परिवर्तन के अलावा, मैं भी/विजेट में आइफ्रेम विजेट्स के लिए एक नई एप्लिकेशन को बनाने के लिए किया था। अब रूट डोमेन पर सत्र ठीक लगता है। –
मुझे लगता है कि वापस ले, सत्र ठीक हैं, लेकिन उपयोगकर्ता अभी भी 0 लौटा रहा है पृष्ठ के बाद कुछ मिनट के लिए निष्क्रिय है। –