2012-03-21 12 views
24

मैंने PHP में सत्र शुरू करने के लिए session_start() का उपयोग किया, लेकिन जब मेरा ब्राउज़र बंद हो जाता है, तो सत्र समाप्त हो जाता है।मैं PHP में लगातार सत्र कैसे बना सकता हूं?

ब्राउज़र में बंद होने वाले लगातार सत्र बनाने के लिए मैं PHP का उपयोग कैसे करूं?

+4

कुकीज़ के लिए नौकरी की तरह लगता है –

उत्तर

51

php.ini मान session.cookie_lifetime देखें।

0 का डिफ़ॉल्ट मान ब्राउज़र बंद होने पर सत्र समाप्त करने का मतलब है।

आप इस मान को सीधे php.ini में ओवरराइड कर सकते हैं या ini_set का उपयोग करके सत्र शुरू करने से पहले इसे अपने एप्लिकेशन में सेट कर सकते हैं। इसे 0 से अधिक कुछ सेट करने से सत्र उस अवधि के लिए लाइव हो जाएगा।

उदा।

ini_set('session.cookie_lifetime', 60 * 60 * 24 * 7); // 7 day cookie lifetime 
session_start(); 

ऊपर के उदाहरण जब सत्र शुरू हो जाता से 7 दिन का एक समय समाप्ति के साथ स्थापित किया जाना सत्र कुकी का कारण बनता है।

नोट: आप कोड के एक ही हिस्से से अपने वेबपेजों के सभी के लिए अपने सत्र शुरू करते हैं, इस सत्र की समाप्ति के लिए हर बार session_start() कहा जाता हो जाता है का विस्तार करने के लिए जारी नहीं होंगे। कुकी लाइफटाइम तब से सेट होता है जब सत्र पहली बार शुरू होता है, न कि बाद के अनुरोधों पर। यदि आप वर्तमान समय से 7 दिनों के बाहर सत्र के जीवनकाल को विस्तारित करना चाहते हैं, तो session_regenerate_id() भी देखें।

इसके अलावा नोट: अपने session.gc_maxlifetime मूल्य सत्र कुकी की लंबाई से कम कुछ के लिए सेट है, तो आप एक स्थिति हो सकता है जहां उपयोगकर्ता 5 दिनों के लिए साइट पर जाएँ नहीं है और जब वे वापस आते हैं, सत्र कुकी अब मान्य नहीं है क्योंकि सर्वर पर डेटा हटा दिया गया है। इसका समाधान करने के लिए, आपको इस सत्र डेटा के लिए जीवन भर को कम से कम अपने कुकी जीवनकाल तक सेट करना चाहिए। मैनुअल स्टेटस के रूप में, सत्र डेटा के लिए कस्टम session.save_path का उपयोग करना आवश्यक हो सकता है, जिसे आप डिफ़ॉल्ट से अधिक लंबे समय तक जारी रखना चाहते हैं। इसलिए, अपने स्क्रिप्ट ऐसी दिखाई देगी हो सकता है:

ini_set('session.cookie_lifetime', 60 * 60 * 24 * 7); 
ini_set('session.gc_maxlifetime', 60 * 60 * 24 * 7); 
ini_set('session.save_path', '/home/yoursite/sessions'); 
session_start(); 
5

कुकी का उपयोग करें। उदाहरण के लिए, this tutorial

2

सत्र इस प्रकार डिज़ाइन किए गए हैं कि वे "सत्र" आधारित हैं। दूसरे शब्दों में, यदि आप अपना ब्राउज़र बंद करते हैं (जो अनिवार्य रूप से आपका सत्र है), तो ऐसा लगता है कि दूर जाना है।

आप फ़ाइल में बजाय डेटाबेस में सत्र डेटा संग्रहीत करने का प्रयास कर सकते हैं। तालिका में सत्र आईडी और सत्र डेटा स्टोर करें। फिर कुकी PHPSESSID (डिफ़ॉल्ट रूप से) से सत्र आईडी को याद करें और अपने डेटाबेस से सत्र डेटा देखें।

+1

डेटाबेस में सत्र संग्रहीत करना सत्र को लगातार बनाएगा यदि कुकी बंद होने पर कुकी को दूर जाने के लिए सेट किया गया है ... इस पर निर्भर करता है कि आपने प्रोग्राम कैसे किया है कचरा संग्रह और विधियों को नष्ट कर सकते हैं जो आप सत्र डेटा को सहेज सकते हैं लेकिन ब्राउज़र के बंद होने और फिर से खोलने के बाद अधिकतम जीवन 0 पर सेट होने पर उपयोगकर्ता को नए सत्र डेटा के साथ एक नया सत्र आईडी होगा। – Snowburnt

2

मैं अगर तुम एक लगातार सत्र चाहते कुकी और एक डेटाबेस का उपयोग की सिफारिश करेंगे। हम एक कुकी में ग्राहक की आईडी (यादृच्छिक 32 बिट अल्फ-एन्यूमेरिक वैल्यू) स्टोर करते हैं और उसके बाद संदर्भ देते हैं कि उनकी ग्राहक जानकारी लोड हो।

2

आप session_start() लिखे बिना अपने सत्र शुरू कर सकते हैं और आप इस

setcookie('PHPSESSID','any id' , any time); 

तरह कुकी के साथ यह शुरू कर सकते हैं, क्योंकि जब आप टाइप session_start() इस किया जा सकता है और फिर इस

print_r($_COOKIE); 
तरह कुकी प्रदर्शित करने का प्रयास

तो outpout हो जाएगा:

Array ([PHPSESSID] => c0voj7h0b4aesddkc17a6jk7c3) 

बस इसे अपने आप आज़माएं