2011-02-04 6 views
5

क्या एक ही वेब एप्लिकेशन के एकाधिक उपयोगकर्ताओं के संदर्भ में निम्नलिखित कोड में समस्या के लिए कोई जगह है? मेरा मतलब है, मुझे पता है कि एक एकल एएसपी.NET अनुप्रयोग के लिए सभी सत्रों में पूरी तरह से स्थिर स्ट्रिंग साझा की जाएगी, लेकिन यह स्पष्ट रूप से Current.Session को संदर्भित करता है, भले ही यह स्थिर है, ऐसा लगता है कि यह हमेशा सत्र उदाहरण का संदर्भ देगा "वर्तमान उपयोगकर्ता" का।क्या HttpContext.Current.Session के लिए स्थिर संदर्भ सभी उपयोगकर्ताओं के लिए समान सत्र लौटाता है?

लेकिन एक त्रुटि हो रही है जिसे Mode के वर्तमान मूल्य को साझा करने वाले सभी लोगों द्वारा समझाया जा सकता है और इस प्रकार सबसे हालिया परिवर्तन हर किसी के मोड मान को ओवरराइट कर रहा है।

(एक पृष्ठभूमि के रूप में:। इस स्ट्रिंग एक Helpers वर्ग है कि आवेदन भर में इस्तेमाल किया जाता है में है मैं नहीं चाहता कि Session["Mode"] आवेदन भर के लिए हार्ड-कोडेड संदर्भ बनाना चाहते हैं और हर विधि में Session["Mode"] पारित करने के लिए नहीं करना चाहते हैं एक aspx.cs पेज से कहते हैं।)

public static string Mode 
{ 
    get 
    { 
     var value = HttpContext.Current.Session["Mode"]; 
     return (value ?? string.Empty).ToString(); 
    } 
    set 
    { 
     HttpContext.Current.Session["Mode"] = value; 
    } 
} 
+0

"वर्तमान HTTP अनुरोध के लिए HttpContext ऑब्जेक्ट प्राप्त या सेट करता है।" http://msdn.microsoft.com/en-us/library/system.web.httpcontext.current.aspx –

उत्तर

8

HttpContext.Current हमेशा वर्तमान अनुरोध के संदर्भ देता है (यदि है वहाँ एक वर्तमान अनुरोध)।

चूंकि प्रत्येक उपयोगकर्ता एक अलग अनुरोध निष्पादित करेगा, प्रत्येक संदर्भ अलग होगा।

0

आपकी संपत्ति static है। यह वास्तव में उपयोगकर्ताओं के बीच संपत्ति साझा करने का कारण है।

अधिक जानकारी के लिए Scope of static Variable in multi-user ASP.NET web application देखें।

+0

संपत्ति इस मामले में 'get' और 'set' विधि पर एक मुखौटा है। तो तथ्य यह है कि स्थानीय सत्र से डेटा प्राप्त किया जा रहा है इस संपत्ति सत्र-निर्भर के संदर्भ बनाता है और इसलिए उपयोगकर्ताओं के बीच साझा नहीं किया जाता है। –

+0

चूंकि आप एक स्थिर सदस्य के भीतर से इंस्टेंस सदस्यों को कॉल नहीं कर सकते हैं, इसलिए मैं 'HttpContext.Current.Session' की समीक्षा करूंगा ताकि यह देखने के लिए कि वे वास्तव में इसके आसपास कैसे पहुंचते हैं और इसे उपयोगकर्ता विशिष्ट बनाते हैं। यदि मेरे पास समय है तो मैं इसे देख लूंगा, लेकिन जवाब दिलचस्प होगा। – toddmo