ASP.NET में, मुझे सत्र (कब) के बजाय सत्र (क्लियर) का उपयोग करना चाहिए?


118

सत्र सत्र () और सत्र। और (दोनों) सत्र चर से छुटकारा। जैसा कि मैं इसे समझता हूं, एबंडन () वर्तमान सत्र को समाप्त करता है, और इस तरह से एक नया सत्र बनाने का कारण बनता है जिससे अंत और प्रारंभ की घटनाओं को आग मिलती है।

ज्यादातर मामलों में एबंडन () को कॉल करना बेहतर लगता है, जैसे कि उपयोगकर्ता को लॉग आउट करना। क्या ऐसे परिदृश्य हैं जहाँ मैं इसके बजाय Clear () का उपयोग करूँगा? क्या प्रदर्शन में बहुत अंतर है?

जवाबों:


172

Session.Abandon() सत्र को नष्ट कर देता है और सत्र_ऑन ईवेंट ट्रिगर हो जाता है।

Session.Clear()बस ऑब्जेक्ट से सभी मान (सामग्री) निकालता है । उसी कुंजी के साथ सत्र अभी भी जीवित है।

इसलिए, यदि आप उपयोग करते हैं Session.Abandon(), तो आप उस विशिष्ट सत्र को खो देते हैं और उपयोगकर्ता को एक नया सत्र कुंजी मिलेगा। जब उपयोगकर्ता लॉग आउट करता है तो आप इसका उपयोग कर सकते हैं।

उपयोग करें Session.Clear(), यदि आप चाहते हैं कि उपयोगकर्ता एक ही सत्र में शेष रहे (यदि आप नहीं चाहते कि उपयोगकर्ता उदाहरण के लिए पुनः लोड हो) और सभी सत्र विशिष्ट डेटा रीसेट करें।


1
मैं स्पष्ट () के बजाय RemoveAll () का उपयोग करना बेहतर मानता हूं, जैसा कि "डारिन दिमित्रोव" ने यहां बताया है कि stackoverflow.com/a/3931344/713246
Bibhu

4
@ बिभु: उन्होंने कैसे सुझाव दिया कि RemoveAll () क्लियर () से बेहतर था? मैंने उनके उत्तर में देखा कि RemoveAll () कॉल क्लियर (), और कार्यात्मक रूप से समान प्रतीत होता है।
एडम मिलर

1
Session.Abandon()विंडोज प्रमाणीकरण के उपयोग से एक आंतरिक एप पर बस 'लॉगआउट' के रूप में उपयोग किया जाता है - उपयोगकर्ताओं को फिर से प्रमाणित (क्रोम, एफएफ) नहीं करना था, लेकिन सत्र
निपट

13

केवल जब उपयोगकर्ता लॉग आउट करता है तो Session.Clear () का उपयोग करके सुरक्षा छेद को बंद किया जा सकता है। जहां तक ​​वेब सर्वर का संबंध है, सत्र अभी भी मान्य है। इसके बाद सत्र आईडी को सूँघना, और पकड़ना और उस सत्र को हाईजैक करना एक बहुत ही मामूली बात है।

इस कारण से, जब कोई उपयोगकर्ता लॉग आउट करता है, तो वह सत्र सुरक्षित करने के लिए अधिक सुरक्षित और अधिक समझदार होगा। (इसलिए) ताकि सत्र नष्ट हो जाए, और एक नया सत्र बनाया (भले ही लॉगआउट यूआई पृष्ठ नए सत्र का हिस्सा हो; नए सत्र में उपयोगकर्ताओं का कोई भी विवरण नहीं होगा और नए सत्र को अपहृत करना एक नए सत्र के बराबर होगा, इसलिए यह मूक होगा)।


4
खाली सत्र को हाइजैक करने की बात क्या होगी? अपहरणकर्ता को अभी भी लॉग इन करना होगा, और नए उपयोगकर्ता को आकस्मिक रूप से प्रदान करने के लिए उनका कोई डेटा नहीं है।
बजे

3

Session.Abandonऊपर बताए गए सत्र को नष्ट कर देता है, इसलिए आपको किसी को लॉग आउट करते समय इसका उपयोग करना चाहिए। मुझे लगता है कि Session.Clearई-कॉमर्स वेबसाइट पर खरीदारी की टोकरी के लिए एक अच्छा उपयोग होगा। इस तरह से उपयोगकर्ता को लॉग आउट किए बिना टोकरी साफ हो जाती है।


लेकिन क्या होगा अगर मैं Session.Abandonएक विशिष्ट खरीदारी की टोकरी को खाली करने के लिए उपयोग करूं?
डब्ल्यूटीएफज़ेन

0

मेरे पास यह मुद्दा था और दोनों की कोशिश की, लेकिन "पेजएडिटस्टैट" जैसी बकवास को हटाने के लिए समझौता करना पड़ा, लेकिन उपयोगकर्ता की जानकारी को हटाने से ऐसा नहीं हुआ कि मुझे इसे फिर से देखना पड़े।

public static void RemoveEverythingButUserInfo()
{
    foreach (String o in HttpContext.Current.Session.Keys)
    {
        if (o != "UserInfoIDontWantToAskForAgain")
            keys.Add(o);
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.