2010-01-28 15 views
6

के साथ PHP समस्या मेरे पास एक सत्र हैंडलर क्लास है जो स्क्रिप्ट के अंत में session_write_close() को कॉल करती है। यह बीमा करता है कि यहां तक ​​कि अगर कोई हेडर() या निकास() जारी किया जाता है तो सत्र डेटा सहेजा जाता है।समवर्ती सत्रों और AJAX

public function __destruct() 
{ 
    session_write_close(); 
} 

हालांकि, मैंने देखा है कि मेरे AJAX पृष्ठों में से एक के लिए दो सत्र अपडेट डेटाबेस परत द्वारा किए जाते हैं।

मेरा अनुमान है कि [1] पृष्ठ लोड होता है और एक [2] AJAX अनुरोध भेजता है। [2] AJAX अनुरोध को [1] पृष्ठ को session_write_close() पर कॉल करने का मौका मिलने से पहले सत्र शुरू करना होगा।

[2] AJAX पृष्ठ ने सत्र को लोड करने के बाद [1] पृष्ठ अंततः सत्र को बचाता है और उसके बाद [2] AJAX अनुरोध इसके सत्र को बचाता है - जो पहले को ओवरराइट करता है!

यह इस प्रकार दिखाई देंगे:

[1] page loads session 
[1] page sends output 
[2] ajax loads session 
[1] page saves session 
[2] ajax sends output 
[2] ajax saves session 

क्या मुझे यकीन है कि एक पृष्ठ एक सत्र लोड नहीं होने से पहले अगला सत्र को बचाने के लिए एक मौका है बनाने के लिए क्या करते हैं?

+0

यह बहुत रोचक है ... मुझे इस तरह की समस्या कभी नहीं मिली (सिलिकॉन पर दस्तक दें) कई प्रकार के उद्देश्यों के लिए अजाक्स उपयोग के बावजूद मुझे इस पर जवाब देने में दिलचस्पी है। – prodigitalson

उत्तर

3

धारणा गलत थी।

... सत्र डेटा समवर्ती लेखन को रोकने के लिए केवल एक ही स्क्रिप्ट किसी भी समय एक सत्र पर काम कर सकते हैं http://us.php.net/session_write_close

दूसरे शब्दों में, आप के लिए 100 AJAX अनुरोध चलते रह सकते लॉक किया गया है एक ही समय में एक उपयोगकर्ता और वे प्रत्येक अपनी बारी का इंतजार करेंगे।

मेरी समस्या सही सत्र तालिका कॉलम चुनने में एक त्रुटि साबित हुई जिसके परिणामस्वरूप मेरे सत्र प्रत्येक लोड को फिर से बनाया जा रहा है।

+0

.. जो इस "समस्या" के बारे में जानकारी की कमी की व्याख्या करेगा ... – Xeoncross

संबंधित मुद्दे