2010-09-24 6 views
9

क्या session_start() session.gc_maxlifetime चर द्वारा सत्र आईडी कुकी का जीवन विस्तारित करना है?PHP सत्र प्रत्येक अनुरोध पर कुकी समाप्ति को विस्तारित नहीं कर रहे हैं

मेरा session.gc_maxlifetime 24 मिनट है, और साइट पर अतिरिक्त गतिविधि के बावजूद प्रत्येक सत्र केवल 24 मिनट रहता है। मुझे अपना सत्र मिलता है, पृष्ठ को रीफ्रेश करें, और समाप्ति समय बदल नहीं जाता है। इसका परिणाम 24 मिनट के लॉगिन के बाद लॉगआउट में होता है, इससे कोई फर्क नहीं पड़ता। क्या मेरी कॉन्फ़िगरेशन में कुछ गड़बड़ है?

+0

मुझे वही समस्या थी जैसा आपने किया था, जहां तक ​​गतिविधि को तब तक बढ़ाया जाना चाहिए जब तक गतिविधि हो, और कई स्थानीय परीक्षण करने के बाद मुझे बस सत्र_regenerate_id() को अपने लिए सबसे अच्छा तरीका मिल गया। –

उत्तर

3

मुझे लगता है कि इस पोस्ट समाधान आप देख रहे हैं प्रदान करेगा: Session timeouts in PHP: best practices

असल में, जब session_start() कहा जाता है, वहाँ 1% संभावना (डिफ़ॉल्ट रूप से) है कि कचरा कलेक्टर चलाया जाएगा। जब कचरा कलेक्टर चलाया जाता है तो यह समाप्त हो गया सत्र समाप्त हो जाता है और हटा देता है। हालांकि, जब आप पृष्ठ का उपयोग करने वाले एकमात्र उपयोगकर्ता हैं (जो आप शायद विकास के दौरान हैं) या बहुत कम उपयोगकर्ता हैं, तो कचरा कलेक्टर केवल तभी चलाएगा जब आप किसी पृष्ठ तक पहुंच जाएंगे। यह session_start() के बाद होता है, प्रभावी ढंग से टाइमर को रीसेट कर दिया जाता है। इसके आस-पास काम करने की कोशिश करने के बजाय, बस अपना session_start() फ़ंक्शन लागू करें जो टाइमआउट को लागू करता है। उस लिंक को आजमाएं जो मैंने आपको दिए गए लिंक में @Glass Robot पोस्ट किया है।

+0

तो PHP स्वचालित रूप से session_start() पर कुकी को अपडेट नहीं करता है? मुझे इसे मैन्युअल रूप से करना है? –

+0

यह समाप्ति टाइमर अपडेट करता है, लेकिन जब आप किसी अन्य पृष्ठ तक पहुंचते हैं तो यह टाइमर रीसेट हो जाता है। फंक्शन @Glass रोबोट पोस्ट करें (मेरी पोस्ट देखें) आज़माएं। –

+0

क्या हर अनुरोध पर सत्र आईडी को पुन: उत्पन्न करना एक बुरा विचार है? –

3

मैंने PHP में इस व्यवहार को देखा है और PHP पर हर कॉन्फ़िगरेशन की कोशिश की है लेकिन अब तक कोई भाग्य नहीं है।

मेरे सत्र पहले session_start() से सटीक समय पर मर रहे थे, कुकी जीवनकाल में देख रहे थे, यह इसकी समाप्ति समय नवीनीकृत नहीं कर रहा था।

मेरे आवेदन में पहले से ही एक महत्वपूर्ण ग्राहक गणना है, प्रति सेकंड लगभग 60 कनेक्शन, इसलिए जीसी हर 1.5s (मुझे लगता है) मारा गया था।

कुकी समय के विस्तार के लिए मेरा समाधान ऐसा कुछ नहीं था (यह सुरुचिपूर्ण प्रतीत नहीं होता है, लेकिन मेरे लिए काम करता है)।

function my_session_start($maxtime = 300){ 
    // $maxtime = 300 for 5 minutes 
    session_start(); 
    $_sess_name = session_name(); 
    $_sess_id = session_id(); 
    // Update cookie ;) 
    setcookie($_sess_name, $_sess_id, time() + $maxtime, "/"); 
} 

यह मेरा विशेष समाधान है, जैसा कि सवाल "सत्र आईडी कुकी" कहता है। इष्टतम नहीं हो सकता है, लेकिन वास्तव में यह मेरे लिए काम करता है!

+0

मैं बस इसे आज़मा रहा था, और मुझे कुकी सेट के अधिकार को पाने के लिए 'setcookie ($ _ sess_name, $ _sess_id, time() + $ maxtime, "/") पर अंतिम पंक्ति को बदलना पड़ा। उस चौथे पैरामीटर के बिना, प्रत्येक फ़ोल्डर अपनी कुकी के साथ हवाओं और संभवतः अपने स्वयं के सत्र के साथ हवाओं। (मैंने इसके साथ सभी परिणामों को छेड़छाड़ करने के लिए काफी समय तक नहीं खेला।) – user1618143

+0

वास्तव में कुकी पर पथ के बारे में मैंने आपकी टिप्पणी समस्या को मारा है, मैं अपना जवाब अपडेट करूंगा, धन्यवाद !! –

5

मुझे इसके साथ भी समस्या थी। मैं सोच रहा था कि प्रत्येक

session_set_cookie_params($sessionTime, '/', $domain); 
session_start(); 

कारण है कि कुकी PHPSESSID के लिए समाप्ति समय बढ़ाया गया है। लेकिन वास्तव में कुकी PHPSESSID को session_start() द्वारा सत्र में पहली बार सत्र में पहली बार सेट किया जाता है जब नया सत्र आईडी उत्पन्न होता है।

मेरा लक्ष्य था कि सत्र समाप्ति समय प्रत्येक पृष्ठ को खोले जाने पर हर बार पुन: उत्पन्न होना चाहिए। मैं पता लगा है कि सत्र क्योंकि दो कारणों में से समाप्त हो सकते हैं:

  1. कुकी PHPSESSID समाप्त हो रहा है, और इसकी समाप्ति समय session_start() द्वारा पुनर्जीवित नहीं है, इसलिए सत्र हमेशा समाप्ति समय के साथ कुकी की वजह से समाप्त हो जाएगा।
  2. उपयोगकर्ता की कोई गतिविधि सर्वर सत्र पर समाप्त होने का कारण बन जाएगी। यह ini_set('session.gc_maxlifetime', $sessionTime) द्वारा निर्धारित है।इस मामले में

समाधान आप कुकी के लिए समय सीमा समाप्ति समय निर्धारित नहीं होगा जब है, लेकिन अभी भी session.gc_maxlifetime सेट है:

function my_session_start($maxtime = 300) 
{ 
    ini_set('session.gc_maxlifetime', $maxtime); 
    session_set_cookie_params(0, '/', "." . $domain); 
    session_start(); 
} 

सबसे महत्वपूर्ण session_set_cookie_params(0, '/', "." . $domain) में 0 तो कुकी समाप्त नहीं होगी है और वहाँ है इसकी समाप्ति समय बढ़ाने की जरूरत नहीं है। ब्राउजर बंद होने पर यह कुकी हटा दी जाएगी। फिर हम केवल उस समय तक सीमित हैं जो सर्वर की तरफ समाप्त हो जाता है।

मुझे इसके साथ भी समस्याएं थीं कि मैं jQuery अजाक्स पिंग्स द्वारा PHP सत्र समय का विस्तार नहीं कर सका क्योंकि मैंने कुकी में PHPSESSID के लिए समाप्ति समय निर्धारित किया था। 0 सत्रों की अपेक्षित समाप्ति के साथ सभी समस्याओं का समाधान करता है। मेरी अंग्रेजी के लिए खेद है। सौभाग्य।

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