PHP

2011-07-01 11 views
7

में सत्र को नष्ट करते समय त्रुटि मुझे PHP (संस्करण 5.2.10) में सत्र हैंडलिंग में समस्या हो रही है। मैं लॉगिन, लॉगआउट और मान्य सत्रों के लिए नीचे उल्लिखित कार्यों का उपयोग कर रहा हूं।PHP

 
login() 
{ 
    session_set_cookie_params(0); 
    session_start(); 
    session_regenerate_id(true); 
    $_SESSION['user_id'] 
} 

validate_session() 
{ 
    session_set_cookie_params(0); 
    session_start(); 
    if (isset($_SESSION['user_id']) === FALSE) { 
     session_destroy(); 
     logout(); 
     header("Location: login_page"); 
    } 
} 

logout() 
{ 
    session_set_cookie_params(0); 
    session_start(); 
    $_SESSION = array(); 
    setcookie(session_name(), '', time() - 3600, '/'); 
    session_destroy(); 
} 

प्रत्येक पृष्ठ पहले validate_session() फ़ंक्शन को कॉल करता है। यदि सत्र अमान्य है तो यह लॉगिन पेज पर रीडायरेक्ट करता है। लॉगिन() फ़ंक्शन का उपयोग उपयोगकर्ता के लिए सत्र बनाने के लिए किया जाता है। जब उपयोगकर्ता लॉगआउट क्लिक करता है, तो लॉगआउट() फ़ंक्शन सत्र को नष्ट करने के लिए बुलाया जाता है।

समस्या है:
चेतावनी:: session_destroy(): सत्र वस्तु विनाश में विफल रहा है

मैं इस बहुत कम चेतावनी हो रही है बेतरतीब ढंग से लॉगआउट() फ़ंक्शन चेतावनी फेंकता है। लॉगआउट करने के लिए 20-30 कॉलों की तरह, मुझे इसे एक बार मिलता है। कोई विचार?

मैं विंडोज़ XP मशीन पर विकास कर रहा हूं।

अद्यतन: सत्र फ़ाइल-सिस्टम में संग्रहीत हैं।
पथ: सी: \ विन्डोज़ \ Temp

+1

ऐसा लगता है यह एक लंबे समय के बाद से आप stackoverflow पर किसी भी सवाल का जवाब स्वीकार कर लिया है हो गया है .. –

+1

हाँ! मैं stackoverflow में बहुत सक्रिय नहीं किया गया है। और कुछ मामलों में मुझे अभी तक एक संतोषजनक उत्तर नहीं मिला है। – Varun

+0

हाय वरुण, क्या आप समझा सकते हैं कि आप उस तुलना में यात्रा का उपयोग क्यों करते हैं? आम तौर पर यदि (! Isset()) पर्याप्त होगा, मुझे पता है कि यह अधिक लोहे की चपेट में है लेकिन जारीकर्ता() को केवल एक बूलियन लौटा देना चाहिए, क्या आपको वास्तव में इसके प्रकार को प्रमाणित करने की आवश्यकता है? शायद यह संभव नहीं है, लेकिन हो सकता है कि कभी-कभी यह सच हो रहा हो जब इसे नहीं करना चाहिए? – picus

उत्तर

0

आप अपने सत्र कैसे संग्रहीत कर रहे हैं? यदि यह फ़ाइल आधारित है तो यह एक टाइमआउट या अनुमति त्रुटि हो सकती है?

इसके अलावा, मुझे आश्चर्य है कि regenerate_id विनाश समारोह को ऐसे सत्र की तलाश कर रहा है जो तकनीकी रूप से वहां नहीं है। क्या आपने पुनर्जन्म समारोह में झूठ बोलने के लिए उस बुलियन तर्क को सेट करने का प्रयास किया है?

हमारे पास यह समस्या केकपीएचपी ऐप पर थी, लेकिन हमने इसे केक सेटिंग्स के साथ झुकाकर सही किया।

+0

सत्र संग्रहीत हैं। मैंने आपके द्वारा सुझाए गए प्रयासों की भी कोशिश की लेकिन फिर भी यह त्रुटि एक बार मिल गई। जैसा कि मैंने उल्लेख किया है, त्रुटि बहुत बार होती है (कभी-कभी एक दिन में), मेरे लिए कुछ बदलाव करना बहुत मुश्किल होता है और फिर देखते हैं कि उसने समस्या को ठीक किया है या नहीं। – Varun

+0

एक और सवाल, क्या उपयोगकर्ता वास्तव में चेतावनी दिखाता है जब चेतावनी दिखाई देती है? या चेतावनी से अलग बिंदु पर और, सब कुछ काम कर रहा है? यदि ऐसा है, तो आप चेतावनी को दबाने पर विचार कर सकते हैं जब तक कि आपने यह अनुमान नहीं लगाया - यानी, यदि यह एक उत्पादन वातावरण है। – picus

0

मिला something जो इस विषय पर उपयोगी हो सकता है। बुनियादी चिंताएं हैं:

  1. क्या सत्र शुरू करने के लिए मान्य है - session_start() से वापसी मूल्य क्या है?
  2. क्या PHP फ़ाइलें 0.inमें सत्र फ़ाइलें मौजूद हैं और हटा दी जा सकती हैं।

मुझे आपके मामले में संदेह है कि यह पहला है। मुझे याद नहीं है, लेकिन मुझे लगता है कि मैंने उस मामले को देखा है जहां सत्र स्वयं को अमान्य कर दिया गया था और फिर किसी कारण से प्रक्रिया को दोहराने की कोशिश की।

2

क्या लॉगआउट() validate_session() से कहीं और कहलाता है? यदि नहीं, तो समस्या लॉगआउट से पहले() session_destroy करने के लिए कॉल किया जा सकता है()

आप इस कोशिश कर सकते:

validate_session() 
{ 
    session_set_cookie_params(0); 
    session_start(); 
    if (!isset($_SESSION['user_id'])) { 
     logout(); 
     header("Location: login_page"); 
    } 
} 

logout() 
{ 
    $_SESSION = array(); 
    setcookie(session_name(), '', time() - 3600, '/'); 
    session_destroy(); 
} 
+0

यह मेरा पसंदीदा समाधान भी है, session_destroy को validate_session() फ़ंक्शन के बजाय लॉगआउट फ़ंक्शन में जोड़ना तार्किक अर्थ बनाता है। इस समाधान द्वारा प्रदान किए जाने वाले फायदों में से एक लॉगआउट पेज पर नए सत्र को रोकने से रोक रहा है, जो session_destroy() फ़ंक्शंस को डुप्लिकेट करने की आवश्यकता को अस्वीकार कर देगा। –

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