मैं कुछ समय बिताया के लिए एक अच्छा जवाब की तलाश में php.ini सर्वर सेटिंग्स कैसे सत्र समाप्त हो सकते हैं। मुझे बहुत सारी जानकारी मिली लेकिन यह पता लगाने में थोड़ी देर लग गई कि क्यों सेटिंग्स उनके तरीके से काम करती हैं। यदि आप मेरे जैसे हैं, तो यह आपके लिए सहायक हो सकता है:
सत्र सर्वर पर कुकीज़ (क्लाइंट के पीसी पर फ़ाइलें) या सर्वर पक्ष के रूप में संग्रहीत हैं । दोनों तरीकों के फायदे और नुकसान हैं।
सर्वर पर संग्रहीत सत्रों के लिए, तीन चर का उपयोग किया जाता है।
session.gc_probability session.gc_divisor session.gc_maxlifetime
(session.gc_probability/session.gc_divisor) संभावना है कि कचरा संग्रहण दिनचर्या चलेंगे पैदा करता है। जब कचरा कलेक्टर चलता है, तो यह सत्र फ़ाइलों के लिए जांच करता है जिन्हें कम से कम session.gc_maxlifetime तक पहुंचाया नहीं गया है और उन्हें हटा दिया गया है।
यह सब बहुत अच्छी तरह से मंच पदों में (यह एक विशेष रूप से!) से समझाया गया है - लेकिन निम्नलिखित प्रश्न सामने आते हैं करते हैं:
1.) कैसे है कि संभावना लागू किया जाता है? सर्वर पासा रोल कब करता है?
ए: सर्वर पर प्रत्येक सक्रिय सत्र के दौरान सत्र_start() को हर बार पासा रोल करता है। तो इसका मतलब यह है आप मोटे तौर पर एक बार हर 100 बार के लिए है कि session_start() कहा जाता है अगर आप session.gc_probability = 1 और session.gc_divisor = 100
2.) क्या होता है के डिफ़ॉल्ट है कचरा कलेक्टर रन देखना चाहिए कम मात्रा सर्वर पर?
ए: जब session_start() इसे कॉल किया जाता है तो पहले सत्र को रीफ्रेश करता है और आपके लिए उपलब्ध सत्र मान बनाता है। यह सर्वर पर आपकी सत्र फ़ाइल पर समय अपडेट करता है। यह तब पासा रोल करता है और यदि यह जीतता है (100 मौकों में से 1) यह कचरा कलेक्टर कहता है। कचरा कलेक्टर तब सभी सत्र आईडी फाइलों की जांच करता है और देखता है कि कोई है जो हटाने के लिए योग्य हैं।
तो इसका मतलब है कि यदि आप सर्वर पर एकमात्र व्यक्ति हैं, तो आपका सत्र कभी निष्क्रिय नहीं होगा और ऐसा लगता है कि सेटिंग बदलने के दौरान प्रभाव नहीं है। आइए मान लें कि आप session.gc_maxlifetime को 10 और session.gc_probability से 100 में बदलते हैं। इसका मतलब है कि कचरा कलेक्टर चलाने का 100% मौका है और यह किसी भी सत्र फ़ाइलों को साफ़ कर देगा जो पिछले 10 सेकंड में नहीं पहुंचे हैं ।
यदि आप सर्वर पर केवल एक ही हैं, तो आपका सत्र हटाया नहीं जाएगा। निष्क्रिय होने के लिए आपको कम से कम 1 अन्य सक्रिय सत्र चलाने की आवश्यकता है।
तो मूल रूप से, कम मात्रा सर्वर पर या एक कम मात्रा समय में - यह session.gc_maxlifetime की तुलना में बहुत लंबे समय तक से पहले कचरा कलेक्टर वास्तव में चलाता है और सत्र वास्तव में नष्ट हो जाती हैं हो सकता है। और यह जानने के बिना कि यह कैसे काम करता है, यह आपके लिए पूरी तरह से यादृच्छिक दिखाई दे सकता है।
3.) वे संभावना का उपयोग क्यों करते हैं?
ए: प्रदर्शन। उच्च वॉल्यूम सर्वर पर आप कचरा कलेक्टर सत्र_स्टार्ट() के प्रत्येक अनुरोध पर चलाना नहीं चाहते हैं। यह सर्वर को धीमा कर देगा। तो आपके सर्वर वॉल्यूम के आधार पर, आप को बढ़ा सकते हैं या कचरा कलेक्टर चलाने की संभावना को कम कर सकते हैं।
मुझे आशा है कि यह आपके लिए चीजों को एक साथ जोड़ देगा। यदि आप मेरे जैसे हैं और आपने सत्र का प्रयास किया है।gc_maxlifetime और ऐसा लगता है कि यह काम नहीं कर रहा है (क्योंकि आपने इसे किसी विकास सर्वर पर बाहर करने की कोशिश की है ताकि किसी को भी परेशान न किया जा सके), तो यह पोस्ट आशा करता है कि आपको कुछ सिर खरोंच से बचाया गया है।
शुभकामनाएं!
जैसा कि मैंने कुछ शोध के बाद इस सवाल पर अपने आप को ठोकर खाई, एक [इस stackoverflow सवाल] पर है कि समस्या पर एक बहुत ही गहन जवाब हो सकता है (http://stackoverflow.com/a/1270960/474526), विशेष रूप से क्यों न तो 'session.gc_maxlifetime' अपडेट करना और न ही 'session.cookie_lifetime' विश्वसनीय दृष्टिकोण हैं। –