2011-12-18 17 views
9

जब मैं session_destroy() का उपयोग करता हूं तो मुझे "सत्र ऑब्जेक्ट विनाश विफल" मिलता है।क्यों सत्र ऑब्जेक्ट विनाश विफल रहा

session_start(); 
if(isset($_SESSION['user_id'])){  
    $_SESSION=array(); 
    if(isset($_COOKIE[session_name()])){ 
     setcookie(session_name(),'',0,"/"); 
    } 
    session_destroy(); 
} 

इस त्रुटि का कारण क्या है?

+3

आप इसे ठीक करने के बजाय त्रुटि को दबाना क्यों चाहते हैं? –

+0

शायद '$ _SESSION = array();' या 'session_name()' 'session_start() 'से पहले' कॉलिंग 'के कारण'? सुनिश्चित नहीं है कि कौन सा सही है ... – LeleDumbo

+0

केवल पहली दो पंक्तियां समझ में आती हैं, शेष कोड परेशान है। मुझे नहीं लगता कि आप समझते हैं कि $ _SESSION कैसे काम करता है। बस session_start() पर कॉल करें और इसका इस्तेमाल करें। – rook

उत्तर

14

त्रुटि:

Warning: session_destroy(): Session object destruction failed

यह बल्कि तुच्छ, कोई सत्र वस्तु शुरू कर दिया गया है, लागू किए गए कर दिया गया है, तो आप इसे नष्ट नहीं कर सकते।

@ ऑपरेटर हमेशा सक्रिय नहीं है, उदा। त्रुटि रिपोर्टिंग कार्यों के साथ।

संपादित करें:

1) What causes this error?

यह त्रुटि सामान्य रूप से होता है जब पीएचपी सत्र फ़ाइल को नष्ट करने की कोशिश करता है, लेकिन यह यह नहीं मिल रहा।

session_destroy के साथ आपके मामले में केवल one place in PHP है जो इसका कारण बनता है। उस समय session.save_handler (session_set_save_handler के साथ देखें) कार्रवाई को नष्ट करने के लिए देता है। यह निर्भर करता है कि आप किस प्रकार के सेव-हैंडलर का उपयोग करते हैं, डिफ़ॉल्ट एक फ़ाइलें है। उस के साथ, जब session.save_path सेटिंग गलत है (उदा। एक सुलभ निर्देशिका नहीं है), इससे ऐसी त्रुटि होगी।

2) Why would the "@" not be suppressing the error?

यह निर्भर करता है कि आउटपुट कैसे बनाया गया है और PHP कॉन्फ़िगरेशन पर। @ हमेशा काम नहीं करता है। उदाहरण के लिए set_error_handler के साथ पंजीकृत कॉलबैक अभी भी इन संदेशों को प्राप्त करेंगे।

+1

कम से कम तकनीकी रूप से, उद्धृत कोड के शीर्ष पर 'session_start() 'दाएं है। –

+0

शायद शुरू हुआ, लेकिन अभी तक नहीं छोड़ा गया, ['session_commit'] (http://php.net/session_commit) देखें। – hakre

+0

तो उत्तर 'session_write_close()' 'session_destroy()' से पहले है ...? –

0

मेरे मामले में मैं कुकी बनाने से पहले सत्र को नष्ट करने की कोशिश कर रहा था। दूसरे शब्दों में मैं की तरह कुछ किया:

session_start(); 
... 
session_destroy(); 

तो सर्वर सत्र नष्ट करने से पहले ब्राउज़र के साथ 'सम्पर्क' करने का मौका नहीं था। आप एक autoloader उपयोग कर रहे हैं, यह एक वर्ग है कि सत्र में सहेजा गया है लोड करने में नाकाम रहने की जा सकती है सरल समाधान है कि मेरे लिए काम किया

session_start(); 
... 
$_SESSION=array(); 
संबंधित मुद्दे