क्या सत्रों को समय-समय पर या ब्राउज़र बंद करने पर कार्य निष्पादित करने का कोई तरीका है?
हां, लेकिन यह आपके द्वारा कल्पना की जाने वाली विधि को काम नहीं कर सकता है। आप session_set_save_handler
का उपयोग करके अपने स्वयं के कस्टम सत्र हैंडलर को परिभाषित कर सकते हैं, और परिभाषा का हिस्सा destroy
और gc
कॉलबैक फ़ंक्शंस की आपूर्ति कर रहा है। इन दोनों को तब बुलाया जाता है जब एक सत्र स्पष्ट रूप से नष्ट हो जाता है और जब इसे समाप्त होने के कारण नष्ट कर दिया जाता है, तो वे वही करते हैं जो आप पूछते हैं।
हालांकि, टाइमआउट के कारण सत्र समाप्ति घड़ी की सटीकता के साथ होती है; एक कालबाह्य सत्र वास्तव में "कचरा एकत्रित" होने से पहले यह काफी समय हो सकता है। इसके अलावा, कचरा संग्रह probabilistically ट्रिगर करता है इसलिए सिद्धांत में ऐसा मौका है कि समाप्त होने वाले सत्र कभी कचरा एकत्रित नहीं होंगे।
क्या यह कामुक है? कुछ साझा समवर्ती एसक्यूएल प्रश्न पर साझा सर्वर के लिए समस्या होने के लिए जा रहे हैं और इनमें से कुछ को कम करने जा रहे बफर के रूप में $ _SESSION का उपयोग करने का विचार है।
मैं वास्तव में कई कारणों से ऐसा नहीं होगा:
- समय से पहले अनुकूलन (इससे पहले कि आप को मापने के लिए, बस यह न मानें कि यह "बेहतर" हो जाएगा)।
- सत्र कभी कचरा एकत्र नहीं किया जा सकता है; भले ही ऐसा न हो, आप को नियंत्रित नहीं करते हैं जब वे एकत्र किए जाते हैं। यह एक समस्या हो सकती है।
- सत्र में सबकुछ खोने की संभावना है (उदा। सर्वर रीबूट), जिसमें प्लेयर प्रगति शामिल है। खिलाड़ियों को प्रगति खोना पसंद नहीं है।
- उसी उपयोगकर्ता के लिए समवर्ती सत्र असंभव होंगे (जिसका "सहेजा गया डेटा" जीतता है और डेटाबेस तक बना रहता है?)।
विकल्पों के बारे में क्या?
ठीक है, चूंकि हम एल सस्ताओ साझा होस्टिंग के बारे में बात कर रहे हैं, इसलिए आप निश्चित रूप से सर्वर के नियंत्रण में नहीं जा रहे हैं, इसलिए PHP एक्सटेंशन (उदा। यादगार) शामिल कुछ भी सशर्त है। डाटाबेस-साइड कैशिंग भी उड़ने वाला नहीं है। इसके अलावा, आपके सर्वर पर लोड आपके नियंत्रण के बाहर चर से प्रभावित होने जा रहा है ताकि आप वास्तव में कोई क्षमता योजना नहीं कर सकें।
किसी भी मामले में, मैं यह सुनिश्चित करके शुरू करता हूं कि डेटाबेस स्वयं को अच्छी तरह से संरचित किया गया है और कोड इस तरह से लिखा गया है कि डेटाबेस पर लोड को कम करता है (केवल एक संपादक में सामान टाइप करके मुफ्त प्रदर्शन)।
इसके बाद, आप केवल पढ़ने के लिए कैशिंग पेश कर सकते हैं: आमतौर पर वहां बहुत सारी चीज़ें होती हैं जिन्हें आपको प्रदर्शित करने की आवश्यकता होती है लेकिन संशोधित करने का इरादा नहीं है। डेटा के लिए "लगभग कभी नहीं" अपडेट हो जाता है, जब भी आपको एक आसान और बहुत प्रभावी सुधार हो सकता है, तो एक सत्र कैश जिसे आप अमान्य करते हैं (आप अमान्यता के संबंध में झूठी सकारात्मक भी हो सकते हैं, जब तक कि वे बहुत अधिक नहीं हैं चीजों की भव्य योजना)।
अंत में, यदि आप एकल अनुरोध के दौरान डेटाबेस से दो बार डेटा खींचने के बारे में चिंतित हैं तो आप प्रति-अनुरोध कैशिंग (चर में) जोड़ सकते हैं।
मेम्कैश निश्चित रूप से जाने के लिए, itll सत्र भंडारण/लिखने की तुलना में अधिक तो आवारा हल्का तरीका है। – gorelative
ऑप्टिमाइज़ न करें जब तक आपको पता न हो कि आपको कोई समस्या है। जब तक आपके पास पर्याप्त भार है कि यह एक समस्या है, तो आपके मेजबान ने आपको अपने समर्पित सर्वर पर वैसे भी स्थानांतरित कर दिया होगा। –
ठीक है। मैं उस विचार को तब स्क्रैप करूंगा। धन्यवाद दोस्तों! – Ryan