2009-08-30 20 views
6

मैं सत्र को अमान्य करने के लिए निम्न कोड का उपयोग कर रहा हूं। मैंने कई पृष्ठों में logout.php से लिंक किया है। यदि वह लॉगआउट लिंक क्लिक किया गया है तो logout.php पृष्ठ पर क्लिक किया जाता है। logout.php में कोड निम्न है।PHP सत्र की समस्याएं

unset($_SESSION['admin']); 
session_destroy(); 
header('Location: index.php'); 

एक बार सत्र अमान्य हो जाने के बाद मैं पृष्ठ index.php खोलना चाहता हूं।

Warning: session_destroy() [function.session-destroy]: Trying to destroy uninitialized session in C:\xampp\htdocs\Selection\logout.php on line 3

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\Selection\logout.php:3) in C:\xampp\htdocs\Selection\logout.php on line 4

क्या गलत है: लेकिन मैं निम्न त्रुटि geting रहा हूँ?

उत्तर

16

मुझे लगता है कि आप सत्र को नष्ट करने से पहले session_start() फ़ंक्शन नहीं कह सकते हैं।

+0

क्यों कभी नीचे गिराया गया, वह सही है। –

+0

धन्यवाद ... वैसे भी session_start() को स्क्रिप्ट की शुरुआत में बुलाया जाना चाहिए। – mck89

8

आपको पृष्ठ के शीर्ष पर session_start() को PHP को याद दिलाने के लिए कॉल करने की आवश्यकता होगी कि यह पृष्ठकॉल सत्र से संबंधित है। - कम से कम PHP manual बताता है कि।

उस मैनुअल पेज पर दिए गए नोट्स संकेत देते हैं कि session_unset() केवल पुराने वातावरण में उपयोग किया जा रहा है जो $ _SESSION चर का उपयोग नहीं कर रहे हैं।

header('Location: index.php'); 
session_start(); 
session_unset(); 
session_destroy(); 
+0

अच्छी तरह से यह एक अच्छी बात है कि वह 'session_unset()' का उपयोग नहीं कर रहा है ... – nickf

+0

@nickf: सही, सही ढंग से पहचाना नहीं गया –

2

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

तुम बस अगर एक सत्र पहले से मौजूद है जांच करने की आवश्यकता:

if (session_name() != '') { 
    session_destroy(); 
} 
+1

मुझे लगता है कि पुनर्निर्देशन अंत में रखा जाना चाहिए, क्योंकि इस तरह के कोड को लिखना पुनर्निर्देशन करता है और अन्य कार्यों को निष्पादित नहीं करता – mck89

+0

नहीं, यह अपेक्षा के अनुसार काम करता है। – rodrigoap

+1

यह केवल अपेक्षित के रूप में काम करता है क्योंकि शीर्षलेख भेजने के बाद स्क्रिप्ट अभी भी निष्पादन समाप्त कर देती है। हालांकि कोड के भ्रम को कम करने के लिए सत्र को नष्ट करने के बाद आपको हेडर रखना चाहिए। – MitMaro

1

समस्या यह है कि आप एक सत्र जो शुरू कर दिया नहीं किया गया है को नष्ट नहीं कर सकते हैं:

0

आप हमेशा session_start का उपयोग करना चाहिए(); एक सत्र समारोह/चर का उपयोग करने से पहले। तो session_start(); के साथ सभी PHP फ़ाइलों को शुरू करें। Logout.php:

session_start(); 
session_destroy(); 
header('Location: index.php'); 

आपको इसे अनसेट करने की भी आवश्यकता नहीं है।

+0

PHP दस्तावेज़ बहुत स्पष्ट रूप से $ _SESSION सरणी को '$ _SESSION = array();' के साथ मिटा देता है। आप क्यों कहते हैं कि आपको इसे अनसेट करने की आवश्यकता नहीं है। [यह वह दस्तावेज है जिसका मैं जिक्र कर रहा हूं] (http://php.net/manual/en/function.session-destroy.php)। – doug65536

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