2011-07-25 10 views
14

संभव डुप्लिकेट:
difference between http.context.user and thread.currentprincipal and when to use them?Thread.CurrentPrincipal.Identity बनाम HttpContext.User.Identity

ASP.NET अनुप्रयोग में इन दोनों के बीच क्या अंतर है?

मुझे पता है कि HttpContext.User.Identity सेट है जब उपयोगकर्ता को FormsAuthentication के माध्यम से प्रमाणित किया जाता है। लेकिन Thread.CurrentPrincipal.Identity कब सेट है?

क्या वे हमेशा एक ही मूल्य रखते हैं?

क्या यह अभी भी उस एप्लिकेशन की अन्य परतों के लिए सच है जो HttpContext तक पहुंच नहीं है?

उत्तर

10

HttpContext.User.Identity आपके वेब ऐप में वर्तमान में लॉग इन उपयोगकर्ता है।

Thread.CurrentPrincipal केवल तब लागू होता है जब <authentication mode = "windows"/>। आम तौर पर यह विंडोज आधारित अनुप्रयोगों के साथ उपयोग कर रहा है (Winforms, WPF ..)

+1

'Thread.CurrentPrincipal' अभी भी' साथ मोड = "रूपों" काम करता है ' – bevacqua

+1

@ निको: लेकिन यह आपको वर्तमान में लॉगिन उपयोगकर्ता नहीं देता है। यह आपको इसके बजाय विंडोज़ उपयोगकर्ता विवरण देगा। तो, इस मामले में थ्रेड। वर्तमान प्रिंसिपल ज्यादा समझ में नहीं आता है। – CharithJ

+2

प्रपत्र प्रमाणीकरण में थ्रेड। CurrentPrincipal HttpContext.User.Identity से अनियंत्रित हो सकता है। [हंसेलमैन] से इस पुराने ब्लॉग को देखें (http://www.hanselman.com/blog/SystemThreadingThreadCurrentPrincipalVsSystemWebHttpContextCurrentUserOrWhyFormsAuthenticationCanBeSubtle.aspx)। यह भी नया [स्टैक ओवरफ्लो] देखें (http://stackoverflow.com/a/16693746) – subsci

-3

अगर आप HttpContext.User.Identity Thread.CurrentPrincipal के बराबर होती है का उपयोग

+4

सत्य नहीं है। यदि आप पृष्ठभूमि में थ्रेड को घुमाते हैं, तो आप इसे कैसे चला रहे हैं, इस पर निर्भर करते हुए, थ्रेड चल रहा है, जबकि HttpContext.User बदल सकता है। – blowdart

+1

HttpContext.Current.User वर्तमान में वेब-उपयोगकर्ता में लॉग इन होगा। थ्रेड। कंटेंट प्रिंसिपल जो भी कार्यकर्ता प्रक्रिया (थ्रेड) चला रहा है उसके लिए प्रिंसिपल होगा। किसी फॉर्म/wpf ऐप के मामले में यह समझ में आता है क्योंकि जिस उपयोगकर्ता को आप एप्लिकेशन चला रहे हैं वह वह है जिसे आप रुचि रखते हैं। –