2011-09-08 11 views
5

ऐसा प्रतीत होता है कि Symfony2 अनुरोध के बाद AJAX प्रतिक्रिया की प्रतीक्षा कर रहा है। जब तक प्रतिक्रिया वापस नहीं आती है तब तक यह उसी पृष्ठ पर एक और लिंक पर नहीं जायेगा। http://garethmccumskey.blogspot.com/2009/10/php-session-write-locking-and-how-to.htmlमैं सिम्फनी 2 में एक सत्र कैसे मारूं?

मैं Symfony2 में एक समाधान नहीं मिल सकता है, हालांकि:

यह लेख समस्या का वर्णन है।

$session = $this->get('session'); 

// Change the session attributes 

$session->save(); 
session_write_close(); 

// Do database calls and other stuff. 

मैं:

उत्तर

14

ब्लॉग पोस्ट आप बात कर रहे हैं पढ़ने और Session और NativeSessionStorage वर्गों के कोड को पढ़ने के बाद, क्या मैं नकल करने के लिए व्यवहार ब्लॉग पोस्ट में mentionned यह करने के लिए है की कोशिश करेंगे इसका परीक्षण नहीं किया लेकिन इसे उम्मीद के अनुसार काम करना चाहिए। आपकी समस्या का एक अन्य समाधान NativeSessionStorage की तुलना में एक अलग सत्र संग्रहण का उपयोग करना है जिसका उपयोग डिफ़ॉल्ट रूप से किया जाता है। उदाहरण के लिए आप PdoSessionStorage ऑब्जेक्ट का उपयोग कर डेटाबेस स्टोरेज का उपयोग कर सकते हैं। यह एक लॉक को PHP द्वारा उपयोग करने से रोक सकता है। सत्रों के लिए डेटाबेस संग्रहण का उपयोग करने के तरीके के बारे में अधिक जानकारी के लिए यह cookbook entry देखें।

लेकिन इस बात की कोई गारंटी नहीं है कि यदि वे एक ही पंक्ति तक पहुंच रहे हैं तो डेटाबेस सिस्टम एकाधिक अनुरोधों को ढेर नहीं करेगा लेकिन यह NativeSessionStorage के मुकाबले तेज़ तरीका होना चाहिए।

सादर,
मैट

+0

परीक्षण किया गया, अच्छी तरह से काम करता है !! – AlterPHP

+0

उत्कृष्ट, समाधान का परीक्षण करने के लिए धन्यवाद :) – Matt

+0

यदि आपको कोई फर्क नहीं पड़ता कि मैंने इस ब्लॉग पोस्ट में आपका समाधान उद्धृत किया है: http://blog.alterphp.com/2012/08/how-to-deal-with -asynchronous-request.html। अगर आप नाराज हैं तो मुझे बताएं ... – AlterPHP

1

बस एक जो लोग PHP का उपयोग कर रहे हैं के लिए चेतावनी में निर्मित वेब सर्वर (के रूप में मैं फंस गया है, यह दूसरों की मदद कर सकते हैं):

पीएचपी डॉक से:

वेब सर्वर केवल एक सिंगल-थ्रेडेड प्रक्रिया चलाता है, इसलिए यदि अनुरोध अवरुद्ध हो तो PHP अनुप्रयोग बंद हो जाएंगे।

इसका मतलब है कि यदि आप सत्र को सही तरीके से बंद करते हैं, तो भी आप एक बार में एक कनेक्शन के साथ आगे बढ़ेंगे।

http://php.net/manual/en/features.commandline.webserver.php