2008-10-31 14 views
5

का उपयोग करके दूसरी स्क्रिप्ट को कॉल करती है, मेरे पास दो PHP स्क्रिप्ट हैं, दोनों एक ही सत्र का उपयोग करके session_name('MySessID') पर कॉल करके।session_start एक टाइमआउट क्यों करता है जब एक स्क्रिप्ट कर्ल

जब पहली स्क्रिप्ट कर्ल का उपयोग करके दूसरी स्क्रिप्ट को कॉल करती है, तो दूसरी स्क्रिप्ट लटकती है जब session_start() कहा जाता है।

यह क्यों खुश होगा?

उत्तर

6

मुझे पूरी तरह समझ में नहीं आता कि ऐसा क्यों होता है, लेकिन मुझे हल हो गया।

यह bug मेरी समस्या का वर्णन करता है। मेरे पास एक ही स्क्रिप्ट दोनों एक ही सत्र का उपयोग कर एक स्क्रिप्ट पोस्ट कर रही है, जो स्पष्ट रूप से PHP को स्टाल करती है।

तो, मैं पूरी कर्ल पोस्ट स्क्रिप्ट करने से पहले, मैं session_commit फ़ंक्शन को कॉल करता हूं, इसलिए कॉलिंग स्क्रिप्ट सत्र समाप्त करता हूं, और सत्र को पुनरारंभ करने के लिए बुलाया स्क्रिप्ट सक्षम करता है।

वैक ...

9

php मैनुअल अपनी स्क्रिप्ट कॉल करने के लिए session_write_close (आवश्यकता के बिना समाप्त करने के बाद

http://php.net/manual/en/function.session-write-close.php

सत्र डेटा सामान्य संग्रहीत किया जाता है) से, लेकिन जैसा कि सत्र डेटा लॉक किया गया है समवर्ती लिखने से रोकने के लिए केवल एक स्क्रिप्ट किसी भी समय पर सत्र पर काम कर सकती है। सत्रों के साथ फ्रेमसेट का उपयोग करते समय आप इस लॉकिंग के कारण एक-एक करके लोड होने वाले फ्रेम का अनुभव करेंगे। जैसे ही सत्र चर में सभी परिवर्तन किए जाते हैं, आप सत्र समाप्त करके सभी फ्रेम लोड करने के लिए आवश्यक समय को कम कर सकते हैं।

तो आपके पास 2 स्क्रिप्ट एक ही सत्र एट का उपयोग एक ही समय में नहीं कर सकते हैं।

2

मुझे इससे भी काटा गया। मैंने इसे स्टैक ओवरफ्लो में प्रदान की गई जानकारी के लिए धन्यवाद दिया।

मेरे पास दो पृष्ठ थे, दोनों में शीर्ष पर "session_start()" था और पहला कर्ल के साथ दूसरे को कॉल कर रहा था ताकि मैं सत्यापन के बाद दूसरी स्क्रिप्ट में चर पोस्ट कर सकूं। जब तक मैंने "session_write_close()" जोड़ा, तब तक वेबसर्वर लटक रहा था।

कोड का नमूना इस प्रकार है:

// IMPORTANT (OR ELSE INFINITE LOOP) - close current sessions or the next page will wait FOREVER for a write lock. 
session_write_close(); 

// We can't use GET because we can't display the password in the URL. 
$host = $_SERVER['HTTP_HOST']; 
$uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); 
$url = "http://$host$uri/formPage2.php?"; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,$url); //append URL 
curl_setopt($ch, CURLOPT_POST,TRUE);//We are using method POST 
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($_REQUEST, '', "&"));//append parameters  

curl_exec($ch); // results will be outputted to the browser directly 
curl_close($ch); 
exit();