2010-07-07 13 views
6

मेरे पास फॉर्म प्रमाणीकरण है और मुझे HttpContext.Current.User और थ्रेड में संग्रहीत करने के लिए एक कस्टम ऑब्जेक्ट की आवश्यकता है। CurrentPrincipal।PostAuthenticateRequest कई बार आग लगती है

इस पाने के लिए, मैं PostAuthenticateRequest घटना के लिए, तो फिर मैं कस्टम IPrincipal और IIdentity वस्तुओं का दृष्टांत और आवंटित सुनने डीबी से सभी उपयोगकर्ता डेटा मैं HttpContext.Current.User में और Thread.CurrentPrincipal में संग्रहित किया जा करने की जरूरत है पढ़ा है, उन्हें उपरोक्त स्थानों पर।

समस्या यह है कि किसी कारण से PostAuthenticateRequest एक ही अनुरोध .. यह अनावश्यक डीबी roundtrips कि चोट प्रदर्शन का कारण बनता है के लिए कई बार आग ..

मैं यह कैसे करना चाहिए है? (एएसपी.नेट एमवीसी 2)

धन्यवाद।

उत्तर

5

क्या आप वाकई एक अनुरोध के लिए कई बार चल रहे हैं? याद रखें, आपके पृष्ठ पर संदर्भित छवियों और स्टाइल शीट जैसे प्रत्येक संसाधन इस घटना को ट्रिगर करेंगे क्योंकि उन्हें अलग-अलग अनुरोधों के रूप में माना जाता है। आपको सबसे अच्छी तरह से कस्टम ऑब्जेक्ट्स को कैश करने और कैश में उनके अस्तित्व की जांच करने और केवल डीबी पर जाने की सलाह दी जाती है।

आपको कैश पर कुछ लॉकिंग लागू करने की आवश्यकता होगी क्योंकि ये अनुरोध आमतौर पर बहुत करीब होते हैं।

+0

ओह, हाँ! संसाधनों और आदि के साथ बात मेरे दिमाग फिसल गया !!! ताज़ा करने के लिए धन्यवाद! मैंने पहले से ही कैशिंग माना है। लेकिन यह भी प्रभाव के साथ चला जाता है। उदाहरण के लिए, मैंने डीबी से पढ़ा और प्रिंसिपल उपयोगकर्ता की अनुमतियों में स्टोर किया। यदि व्यवस्थापक उपयोगकर्ता के लिए अनुमति बदलने का निर्णय लेता है तो कैश में होने पर यह बहुत अच्छा विचार नहीं है - कैश किए गए उपयोगकर्ता की अनुमतियां तब तक अपडेट नहीं की जाएंगी जब तक उपयोगकर्ता लॉग ऑन/लॉग ऑन नहीं करता .. आपको "संक्षिप्त" कैशिंग के साथ अपना विचार करने की आवश्यकता है। ऐसा लगता है कि यह बिल फिट होना चाहिए .. बहुत बहुत धन्यवाद! – Ant

+0

आप वर्तमान उपयोगकर्ता के लिए पेज_इनिट पर कैश अपडेट कर सकते हैं। फिर इसे पृष्ठ प्रति अनुरोध केवल एक बार डीबी से पुनः लोड किया जाएगा। किसी भी अन्य रिसोर्स से अनुरोध करने से पहले यह हमेशा होता है क्योंकि पृष्ठ अभी तक प्रस्तुत नहीं किया गया है। –

1

अपनी स्क्रिप्ट्स, सीएसएस और छवि निर्देशिकाओं से किसी प्रमाणीकरण को हटाने के लिए बस अपने web.config में टैग का उपयोग करें। उदाहरण के लिए:

<system.web> 
... 
</system.web> 

<location path="~/Scripts"> 
    <system.web> 
     <authorization> 
     <allow users="*"/> 
     </authorization> 
    </system.web> 
</location> 
+2

यह इस घटना को प्रत्येक अनुरोध पर आग लगने में मदद नहीं करेगा इससे कोई फर्क नहीं पड़ता कि आप उस पृष्ठ तक पहुंचते हैं जो प्रतिबंधित है या नहीं। – jlp

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