PHP में session_unset () और session_destroy () में क्या अंतर है?


88

से php.net प्रलेखन:

session_destroy - सत्र में पंजीकृत सभी डेटा को नष्ट कर देता है

session_unset - सभी सत्र चर मुक्त करें

मेरा तीन भाग प्रश्न है:

दो कार्य बहुत समान लगते हैं।
वास्तव में दोनों के बीच अंतर क्या है?

दोनों एक सत्र में पंजीकृत सभी चरों को हटाते हैं। क्या उनमें से कोई भी वास्तव में सत्र को नष्ट कर देता है? यदि नहीं, तो आप इसे कैसे पूरा करते हैं (सत्र को स्वयं नष्ट करें)।

क्या यह सही है कि दोनों में से कोई भी कार्य क्लाइंट में सत्र कुकी को नहीं हटाता है?

जवाबों:


144

session_unsetबस $_SESSIONचर को साफ करता है । यह करने के बराबर है:

$_SESSION = array();

तो यह केवल स्थानीय $_SESSIONचर आवृत्ति को प्रभावित करता है लेकिन सत्र भंडारण में सत्र डेटा को नहीं।

इसके विपरीत, session_destroyसत्र संग्रह में संग्रहीत सत्र डेटा को नष्ट कर देता है (उदाहरण के लिए फ़ाइल सिस्टम में सत्र फ़ाइल)।

बाकी सब कुछ अपरिवर्तित रहता है।


@ Gumbo सत्र_unset () अब पदावनत होने के साथ कुछ समस्या नहीं है? मैंने इसकी जाँच की और यह मेरे काम नहीं आया।
नवनीत

@ खाक क्या चेतावनी है?
GoTo

4
@GoTo: उस सेशन_ऑनसेट का इस्तेमाल ग्लोबल वेरिएबल्स को सेशन वेरिएबल के रूप में पंजीकृत करने के लिए किया जाता था क्योंकि यह PHP 4 में कॉमन था। आज के रूप में उस फंक्शन का उपयोग एनाक्रोनोस्टिक है और आवश्यक नहीं है। एकमात्र कारण यह अभी भी PHP में है शायद पीछे की ओर संगतता है और कुछ नहीं। यदि आप नया कोड लिखते हैं, तो आपको इसका उपयोग नहीं करना चाहिए। यदि आप इसे कोड के भीतर पाते हैं, तो आपको सत्र_रजिस्ट्री () और PHP 4 सत्र चर चर के बाकी हिस्सों को एक साथ हटा देना चाहिए जब तक कि आप स्पष्ट रूप से PHP 4 कोड के साथ काम नहीं कर रहे हैं।
हकर्रे

5
फिर भी यह भ्रामक है: कृपया वर्णन करें local $_SESSION variable instance vs session data in the session storage। जैसा कि मैं जानता हूं कि मेरे जैसे 1000 ऐसे लोग हैं जिन्होंने अपनी बात नहीं कही। धन्यवाद
प्रतीक

1
आपका उत्तर बहुत उलझा हुआ है। कृपया इसे संपादित करने पर विचार करें, क्योंकि मुझे अभी भी लगता है कि दोनों सत्र को नष्ट कर रहे हैं
प्रतिक

17

session_destroy(); पूरे सत्र को हटा रहा है।

session_unset();सत्र से केवल चर हटाता है - सत्र अभी भी मौजूद है। केवल डेटा को काट दिया जाता है।


15
session_unset();

सभी सत्र चर के सभी डेटा को साफ़ करें।


session_destroy();

सभी सत्र निकालें।


उदाहरण :

session_start();
session_destroy();     
$a = "1234";
$_SESSION[a] = $a;

$_SESSION[a]है NULL


session_start();
session_unset();     
$a = "1234";
$_SESSION[a] = $a;

$_SESSION[a]है 1234


तो, मैं उपयोग करेंगे:

session_start();
session_destroy();   
session_start();  
$a = "1234";
$_SESSION[a] = $a;

2
अपने मध्य उदाहरण में -> session_unset();आप कुछ भी नहीं कर रहे हैं क्योंकि आप अभी भी सत्र का उपयोग कर सकते हैं $_SESSION["a"] , तो इसका क्या उपयोग है?
प्रतिक

1
$_SESSION[a]होना चाहिए $_SESSION['a'] और जो आपने कहा था उसके विपरीत, यह आपके पहले उदाहरण में नहीं NULL है
Istiaque Ahmed

5

session_unset()$_SESSIONचर (के रूप में array()) को साफ करेगा , लेकिन यह सत्र फ़ाइल को नहीं छूएगा। लेकिन जब स्क्रिप्ट खत्म होती है; के राज्य $_SESSIONफाइल करने के लिए लिखा जाएगा। तब यह फ़ाइल को हटा देगा, लेकिन इसे हटा नहीं देगा। जब आप उपयोग करते हैं तो session_destroy()यह स्पर्श नहीं करेगा $_SESSION(इसके var_dump($_SESSION)बाद का उपयोग करें session_destroy()), लेकिन सत्र फ़ाइल को हटा देगा, इसलिए जब स्क्रिप्ट बाहर निकलती है तो उसकी स्थिति लिखने के लिए फ़ाइल नहीं होगी $_SESSION



0

मैंने session_unset($_SESSION['session_name'])यह सोचकर उपयोग करने की कोशिश की कि यह केवल विशिष्ट या व्यक्तिगत / एकल सत्र नाम को ही परेशान करेगा। लेकिन उपयोग session_unset($_SESSION['session_name'])केवल सभी सत्र नाम को परेशान करेगा। उपयोग करने का सही कोड केवल तभी है unset($_SESSION['session_name'])जब आप एकल सत्र नाम को अनसेट करना चाहते हैं।


0

session_start (); #it ​​ब्राउज़र रियलटाइम मेमोरी में एक वर्चुअल ऐरे (साहचर्य) बनाएगा

दो आइटम जोड़े गए

> $_SESSION['me'] = "Yadab";  
> $_SESSION['you'] = "Avi";
>
> print_r($_SESSION); #will give, array( "me"=>"Yadab", "you"=>"Avi" )

test1

> unset($_SESSION['me']); #only 'me' variable is removed fully (index & value) 
> print_r($_SESSION); #now the array is Array("you"=>"Avi")

test2

> session_destroy(); #will unset the values of all session variables, but indexes exists 
> print_r($_SESSION); #Output, Array("you"=>undefined)
> #but some browser can store the value in cookies

test3

> session_unset(); #will unset all the main variables not only the values 
> print_r($_SESSION); #that means session array is now empty, like Array()

दूसरों पर टिप्पणी करके व्यक्तिगत रूप से ब्लॉक 1, 2 या 3 का परीक्षण करें


-2

मुझे लगता है कि session_destroy () और session_unset () का उपयोग एक ही समय में किया जाना चाहिए ताकि यह सुनिश्चित हो सके कि सत्र डेटा निश्चित रूप से हटा दिया गया है।


मुझे लगता है कि आप जवाब के बारे में निश्चित नहीं हैं। इसका मतलब यह होना चाहिए कि एक टिप्पणी एक जवाब नहीं होनी चाहिए।
शाफिल इस्लाम

4
session_unset()के बाद session_destroy()व्यर्थ होगा। session_unset()$ _SESSION सुपरग्लोबल से सभी कुंजियों और मानों को साफ़ करने के लिए उपयोग करें , या session_destroy()पूरे सत्र को हटाने के लिए उपयोग करें; दोनों का उपयोग केवल "सुनिश्चित करने" के लिए न करें, कार्य करने के लिए फ़ंक्शन पर भरोसा करें।
redburn

@redburn session_destroy()वर्तमान पृष्ठ से बाहर निकलने तक सेस सुपरग्लोबल संस्करण को परेशान नहीं करता है।
योषा अलायबौ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.