2012-09-25 14 views
5

तो मैं SessionhandlerInterface को लागू करने एक वर्ग बनाया है और एक सत्र हैंडलर के रूप में यह निर्धारित किया है:SessionHandlerInterface लिखने विधि नहीं बुलाया जा रहा है

$sessionHandler = new SessionHandler(); 
session_set_save_handler($sessionHandler); 
session_start(); 

समस्या है, लिखने समारोह कभी नहीं कहा जाता है।

अगर मैं session_set_save_handler के दूसरे पैरामीटर का उपयोग और झूठे के लिए सेट:

session_set_save_handler($sessionHandler, false); 

तो यह ठीक से काम करता है। क्या कोई मुझे इस व्यवहार को समझा सकता है? मैं PHP 5.4.6 का उपयोग कर रहा हूँ।

प्रलेखन में लिखा है:

संचालकों को बचाने सत्र के रूप में वस्तुओं का उपयोग करते समय पीएचपी साथ बंद समारोह रजिस्टर करने के लिए जिस तरह से PHP से अप्रत्याशित दुष्प्रभाव से बचने के लिए आंतरिक रूप से शट डाउन पर वस्तुओं को नष्ट कर देता महत्वपूर्ण है और लिखने से रोकने और बंद होने से रोक सकता है। आमतौर पर आपको register_shutdown_function() फ़ंक्शन का उपयोग करके 'session_write_close' पंजीकृत करना चाहिए।

PHP के रूप में 5.4.0 आप session_register_shutdown() का उपयोग या बस जब session_set_save_handler लागू() OOP पद्धति का उपयोग करके और एक उदाहरण है कि SessionHandlerInterface लागू करता गुजर 'रजिस्टर शटडाउन' ध्वज का उपयोग कर सकते हैं।

लेकिन मैं इसे पूरी तरह समझ नहीं पा रहा हूं।

+0

'सत्र हैडलर' का कार्यान्वयन क्या है? –

+0

जब आप 'session_write_close()' को कॉल करते हैं तो कैसे? –

उत्तर

1

documentation राज्यों निम्नलिखित:

"लिखने" हैंडलर जब तक के बाद उत्पादन धारा बंद कर दिया है निष्पादित नहीं है। इस प्रकार, "लिखने" हैंडलर में डिबगिंग कथन से आउटपुट ब्राउज़र में कभी नहीं देखा जाएगा। यदि डिबगिंग आउटपुट आवश्यक है, यह सुझाव दिया जाता है कि डीबग आउटपुट को इसके बजाय फ़ाइल में लिखा जाना चाहिए।

शायद यही कारण है कि यदि आप एक सरल echo का उपयोग करते हैं तो आपको फ़ंक्शन कहा जा रहा है।

+0

'session_set_save_handler' के दस्तावेज़ में इस पंक्ति का जिक्र करने के लिए धन्यवाद। 'लिखने 'के डॉक्टर में, इसका उल्लेख नहीं है ... – emfi

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