2009-03-31 10 views
6

हर बार जब मैं $ _SESSION में डेटा एक्सेस करता हूं, क्या यह डिस्क पर सत्र फ़ाइल को तुरंत अपडेट करता है, या प्रक्रिया के नीचे जाने पर बस एक बार? या डेटा परिवर्तन के हर एन बाइट्स (फ्लश)?

यह प्रश्न आवश्यक फ़ाइल सत्र हैंडलर, लेकिन प्रत्येक हैंडलर के बारे में आवश्यक नहीं है। (क्या सत्र में प्रत्येक स्पर्श तुरंत किसी भी प्रकार के I/O को याद करता है, स्मृति में सामान्य चर के भंडारण के बगल में)।

उत्तर

3

जैसा कि मैट ने लिखा था, यह डिफ़ॉल्ट रूप से स्क्रिप्ट निष्पादन के अंत में लिखता है। आप में session_write_close()

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

0

हैंडलर पर निर्भर करता है। आप यह सुनिश्चित करने के लिए अपना खुद का हैंडलर लिख सकते हैं कि यह केवल तभी होता है जब आप व्यवहार के बारे में पूरी तरह से सुनिश्चित होना चाहते हैं। सत्र चर का प्रबंधन करने के लिए 6 कॉलबैक उपयोग किए जाते हैं। जिसे "लिखना" कहा जाता है उसे किसी भी वास्तविक I/O को निष्पादित करने की आवश्यकता नहीं होती है और सत्र फ़ाइल लिखने तक कॉल "बंद" तक प्रतीक्षा कर सकती है। यह एक कार्यान्वयन विस्तार है कि, जैसा कि मैंने कहा, हैंडलर पर निर्भर करता है।

+0

प्रक्रिया क्रैश कहें, मुझे लगता है कि अनचाहे सत्र डेटा खो गया है, सही? –

+0

हां, और संभवतः किसी भी असामान्य डेटाबेस क्रियाएं भी खो गई हैं। – jmucchiello

2

यह लिखता है और मेरे सेटअप पर प्रक्रिया का अंत।

public function _session_write_method($id, $sess_data) { 
    var_dump(file_put_contents('/var/www/public_html/testing.txt', serialize($sess_data))); 
    return(true); 
} 

और उसके बाद: मैं एक नया _ session_ write_method बनाया

$_SESSION['foo'] = 'bar'; 
while(true) 

मैं स्क्रिप्ट के निष्पादित, कुछ सेकंड के इंतजार कर रहे थे और उसके बाद प्रक्रिया आईडी पर 'sudo मार' भाग गया। यह धारावाहिक डेटा फ़ाइल में नहीं लिखा था। मैंने अनंत लूप के बिना इसे फिर से चलाया और मुझे मिला: पृष्ठ के बहुत नीचे int (22) और test.txt सफलतापूर्वक लिखा और निहित किया गया: s: 14: "foo | s: 3:" bar ";" ;

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