2009-11-13 23 views
16

के अंदर HttpContext.Current.Response मेरे पास स्थिर वर्ग के अंदर निम्न स्थिर विधि है। मेरा सवाल यह है कि एक स्थिर विधि के अंदर HttpContext.Current.Response का उपयोग करना सुरक्षित है? मैं 100% सुनिश्चित करना चाहता हूं कि यह थ्रेड सुरक्षित है और केवल कॉलिंग थ्रेड से जुड़ा हुआ है .. क्या किसी को जवाब पता है?एक स्थिर विधि

public static void SetCookie(string cookieName, string cookieVal, System.TimeSpan ts) 
    { 
     try 
     { 
      HttpCookie cookie = 
       new HttpCookie(CookiePrefix + cookieName) 
        {Value = cookieVal, Expires = DateTime.Now.Add(ts)}; 
      HttpContext.Current.Response.Cookies.Add(cookie); 
     } 
     catch (Exception) 
     { 
      return; 
     } 
    } 

उत्तर

27

हाँ यह काफी सुरक्षित है। HttContext.Current निष्पादित होने वाले थ्रेड से वर्तमान HttpContext प्राप्त करेगा।

यह एक आम तकनीक है और आपको "ट्रम्प डेटा" जैसे संदर्भ ऑब्जेक्ट को पास करने से बचाती है।

+0

उत्कृष्ट, ऐसा सोचा ... मैं अपने सभी तरीकों के आसपास संदर्भ को पारित नहीं करना चाहता था। – Rippo

+2

"ट्रम्प डेटा" - lol – Yatrix

10

HTTPContext.Current स्थिर है, इसलिए तथ्य यह है कि आप उसे स्थिर विधि से कॉल कर रहे अप्रासंगिक है। प्रासंगिक क्या है कि HTTPContext.Current इस तरह से कार्यान्वित किया जाता है कि यह वर्तमान थ्रेड के HTTP संदर्भ को लौटाता है, यदि यह मौजूद है।

+0

अच्छा स्पष्टीकरण, धन्यवाद – Rippo

5

यह स्पष्ट नहीं है कि आप थ्रेड-सुरक्षा द्वारा वास्तव में क्या मतलब रखते हैं। हां, HttpContext.Current वर्तमान धागे से जुड़े HttpContext ऑब्जेक्ट देता है। ध्यान दें कि यदि आप वर्तमान में अनुरोध को संसाधित करने के अलावा किसी थ्रेड पर फ़ंक्शन को कॉल करते हैं (उदाहरण के लिए, एसिंक फ़ंक्शन कॉल में), तो आप HttpContext ऑब्जेक्ट को एक्सेस करने में सक्षम नहीं होंगे।

एक अन्य दृष्टिकोण है कि संदर्भ वस्तु आपके कार्य के लिए एक तर्क के रूप में पारित हो।

+1

एसिंक थ्रेड के लिए +1 –

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