2013-04-26 11 views
8

मैं एक छोटे से साइट पर काम कर रहा हूं (पढ़ें: < 50 उपयोगकर्ता) गैर-लाभकारी संगठन जो मैं काम करता हूं और मेरा PHP ज्ञान काफी सीमित है। वर्तमान में मेरे पास एक लॉगिन स्क्रिप्ट है जो मुझे ऑनलाइन ट्यूटोरियल से मिली है। जिस समस्या में मैं दौड़ रहा हूं वह यह है कि प्रत्येक उपयोगकर्ता लगभग एक घंटे या उसके बाद लॉग आउट हो जाता है।एक PHP लॉगिन सत्र बनाने में मदद की आवश्यकता है

सुरक्षा वास्तव में सामग्री के साथ कोई समस्या नहीं है और आदर्श रूप में मैं किसी के लिए कई दिनों या सप्ताह के लिए लॉग इन रहना चाहता हूं। हालांकि, सत्र की लंबाई के बारे में Google पर किसी भी खोज ने मुझे लॉगआउट टाइमर को छोटा करने के लिए लोगों को जाल दिया है।

जहाँ तक कोड के रूप में चला जाता है, एक बार प्रवेश पृष्ठ डेटाबेस के लिए उपयोगकर्ता नाम और पासवर्ड तुलना करता है और साथ इस प्रकार है:

session_register("myusername"); 
session_register("mypassword"); 
header("location:index.php") 

और प्रत्येक संरक्षित पृष्ठ पर साथ शुरू होता है:

session_start(); 
if(!session_is_registered(myusername)){ 
header("location:login.html:); 
} 
+3

FYI, 'session_register' को –

+0

को हटा दिया गया है, उपयोगकर्ता के पास कोई गतिविधि होने के बाद सत्र टाइमर को रीसेट करना बेहतर होता है। – Raptor

उत्तर

7

संपादित करें अपने

php_value session.gc_maxlifetime 2000 

2000 सेकंड में है: .htaccess और की तरह कुछ डाल दिया। तदनुसार सेट करें! यह सत्र कचरा कलेक्टर को 2000 सेकंड के लिए सत्र को नष्ट नहीं करने के लिए बताएगा। साथ ही, session_register को बहिष्कृत किया गया है।

+1

तो मैं बस उस लाइन को .htaccess में जोड़ सकता हूं और एक सप्ताह के लंबे लॉगिन के लिए मान 604800 पर सेट कर सकता हूं? (60 x 60 24 x 7) इसके अलावा, एक साइड नोट के रूप में: मुझे पता है कि session_register को बहिष्कृत किया गया है, लेकिन Google द्वारा ली गई स्क्रिप्ट का उपयोग करता है और यह अब तक मेरे लिए ठीक काम कर रहा है। Session_register का उपयोग न करने और समान कार्यक्षमता रखने के लिए मैं इसे बदलने के बारे में कैसे जाउंगा? –

+0

हां, 604800 ठीक काम करेगा। Session_register के बजाय $ _SESSION ['username'] = 'जो भी' का उपयोग करें; – ChrisG

+0

आपकी मदद के लिए बहुत बहुत धन्यवाद! –

4

आप (है, जो मुझे लगता है कि आप कर रहे हैं जब से तुम बदलते कैसे डिफ़ॉल्ट सत्र कार्यों के बारे में कुछ भी उल्लेख नहीं था) PHP के डिफ़ॉल्ट कुकी आधारित सत्र प्रबंधन का उपयोग कर रहे हैं, तो आप उपयोग कर सकते हैं:

session_set_cookie_params(7200); // in seconds...session will last for 2 hours now 
session_start(); //once session cookie parameter is set, start the session.. 

session.gc* आरं मूल्यों का समूह इस उद्देश्य के लिए भी उपयोग किया जाता है, लेकिन याद रखें कि gc केवल तभी सिफारिश करता है जब सत्र कचरा एकत्र किया जाना चाहिए, और इसका मतलब यह नहीं है कि यह तब होगा।

आप पढ़ सकते हैं के बारे में cookie params here और garbage collection here

+0

आप यह मानने में सही हैं कि मैंने कुकीज़ के संबंध में कुछ भी नहीं बदला है। आपके पास कोड की पहली पंक्ति है, मुझे लगता है कि प्रत्येक संरक्षित पृष्ठ पर भी जाता है? –

+0

हां, इसे सत्र में रखने का सबसे अच्छा तरीका फ़ाइल शामिल है और इसे प्रत्येक पृष्ठ में शामिल करें जहां सत्र सक्रिय होगा। – raidenace

+0

यदि यह प्रत्येक पृष्ठ में शामिल है, तो क्या आप किसी भी अलग पृष्ठ पर जाने पर सत्र को 7200 पर रीसेट कर देंगे? थॉरी में यदि आप पृष्ठों को बदलते रहते हैं तो सत्र कभी खत्म नहीं होगा –

6

को देखते हुए अपने प्रश्न और आपके यूज़रबेस के पैमाने पर, मैं एक वैश्विक सेटिंग परिवर्तन के बजाय सत्र चर अनुकूलित करने के लिए प्रयास करने के लिए चुनते चाहते हैं; यह आसान है, जो आपको चाहिए और सभी उपयोगकर्ताओं को लागू करने के लिए बहुत कम प्रयास की आवश्यकता है।

आप (के रूप में अन्य उत्तर में उल्लिखित) अपने वैश्विक सत्र जीवन सेट कर सकते हैं एक .htaccess फ़ाइल का उपयोग:

php_value session.gc_maxlifetime 86400 //this is one day in seconds 

या, आप भी अपने php.ini फ़ाइल में सेट कर सकते हैं - एक टुकड़ा जिनमें से है:

; After this number of seconds, stored data will be seen as 'garbage' and 
; cleaned up by the garbage collection process. 
session.gc_maxlifetime = 86400 

कुछ नहीं बल्कि शुद्ध संदर्भ के लिए, मान आप लंबे समय तक कचरा-संग्रह के लिए विचार करने की आवश्यकता होगी:

86400 = one day 
604800 = one week 

आप कचरा-संग्रह (जीसी) here के बारे में अधिक पढ़ सकते हैं।

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