2011-01-16 17 views
8

में प्रमाणीकरण के साथ आउटपुट कैश दुविधा, मैं एक एएसपी.नेट एमवीसी साइट लिख रहा हूं जिसमें उपयोगकर्ताओं को खाते बनाने और लॉग इन करने की संभावना शामिल है। जैसा कि मैं साइट को आक्रामक रूप से कैश करना चाहता हूं, मैं दौड़ रहा हूं कुछ परेशानी में प्रमाणीकरण के साथ कैशिंग मिश्रण।एएसपी.नेट एमवीसी

प्रत्येक पृष्ठ पर, शीर्ष पर, यदि उपयोगकर्ता लॉग इन है, तो मैं उनके उपयोगकर्ता नाम, उनके प्रोफ़ाइल का एक लिंक, और लॉग आउट करने के लिए एक लिंक आउटपुट करता हूं। अगर वे लॉग इन नहीं हैं, तो मैं एक मानक लॉगिन लिंक आउटपुट करता हूं। इसके अलावा, पृष्ठ में ही, कुछ सामग्री अनधिकृत उपयोगकर्ताओं को नहीं दिखायी जाती है, जबकि अन्य सामग्री इस बात पर निर्भर करती है कि कौन सा उपयोगकर्ता लॉग इन है।

मैंने पहले कुछ समय पहले इस समस्या को हल करने का प्रयास किया था, जिसे स्टैक ओवरफ्लो टीम ने हल किया था समस्या। जेफ ने जवाब दिया कि वे मूल रूप से अनधिकृत उपयोगकर्ताओं के लिए कोई कैशिंग नहीं करते हैं। इसलिए, मैंने एक विशेषता लिखा जो आउटपुट कैशएट्रिब्यूट से प्राप्त हुआ लेकिन उपयोगकर्ता को में लॉग इन किया गया है तो कैशिंग को रद्द कर देता है।

वर्तमान में, मैं उस विशेषता का उपयोग कर रहा हूं, लेकिन मुझे कुछ मामलों में गलत परिणाम मिल रहा है। उदाहरण के लिए, उपयोगकर्ता कुछ पेज पर जा सकते हैं, फिर लॉग इन कर सकते हैं, फिर पेज पर फिर से जाएं, केवल उनके उपयोगकर्ता नाम के बजाय शीर्ष पर लॉगिन लिंक देखने के लिए।

  • private करने के लिए HttpCacheability या Cache-Control प्रकार की स्थापना, बल्कि public से:

    यहां कुछ समाधान है कि मैं विचार कर रहा हूँ कर रहे हैं। इस तरह, प्रतिक्रिया केवल क्लाइंट-साइड कैश की जाती है। क्या इससे समस्या ठीक हो जाएगी? यदि ऐसा होता है, तो इसका कैशिंग की दक्षता पर असर पड़ेगा? मैंने देखा है कि स्टैक ओवरफ़्लो public का उपयोग करना प्रतीत होता है।

  • प्रत्येक उपयोगकर्ता जैसे in this tutorial के लिए अलग-अलग कैश करने के लिए VaryByCustom पैरामीटर सेट अप करना। क्या यह मदद करेगा, जबकि अभी भी कैशिंग की दक्षता और प्रभावशीलता बनाए रखेगी?

अग्रिम धन्यवाद!

उत्तर

9

आपके आवेदन की संरचना के आधार पर, विचारों के बजाय डेटा कैश करने का अर्थ हो सकता है।

चूंकि विचार बहुत सरल हैं और डेटाबेस पहुंच आमतौर पर एक पृष्ठ प्रस्तुत करने के लिए आवश्यक समय लेती है, तो आप अपने नियंत्रक में मॉडल को कैश करके आउटपुट कैशिंग का अधिकतर लाभ प्राप्त कर सकते हैं, और दृश्य के किसी भी uncachable भागों अप्रभावित रहें ताकि आप प्रमाणीकृत उपयोगकर्ताओं द्वारा देखी जा रही सार्वजनिक सामग्री को कैश कर सकें।

आंशिक विचारों के साथ आउटपुट कैशिंग कार्य करने के तरीके भी हैं, लेकिन मेरी राय में वे वास्तव में उचित रूप से अधिक जटिलता जोड़ते हैं।

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