2012-01-20 12 views
26

में केवल पढ़ने के सत्र के लिए लिखना मैं एएसपी सत्रों के उत्सुक व्यवहार में आया हूं। आप नियंत्रक को उपयोगकर्ता के सत्र के बाहर होने के लिए मजबूर कर सकते हैं - मैं ऐसा करने में सक्षम होना चाहता हूं ताकि एक ही समय में एकाधिक अनुरोध निष्पादित हो सकें और सत्र का उपयोग करके उन्हें लगातार निष्पादित किया जा सके।एमवीसी 3+

अक्षम करना सत्र स्थिति काम करता है के रूप में उम्मीद:

[SessionState(SessionStateBehavior.Disabled)] 
public class SampleController : Controller 
{ 
    public ActionResult Test() 
    { 
     // Access to the session should be denied 
     object test = Session["test"]; 
     return Content(test); 
    } 
} 

~/नमूना के लिए जा रहे/टेस्ट एक System.Web.HttpException, अपेक्षा के अनुरूप फेंक देते हैं। तो अब मैं ~/नमूना/टेस्ट काम करने की उम्मीद है, और यह करता है

[SessionState(SessionStateBehavior.ReadOnly)] 
public class SampleController : Controller 
{ 
    public ActionResult Test() 
    { 
     // Read from the session should be fine 
     object test = Session["test"]; 
     return Content(test); 
    } 

    public ActionResult SetTest(string value) 
    { 
     // Write to the session should fail 
     Session["test"] = value; 

     // Read it back from the session 
     object test = Session["test"]; 
     return Content(test); 
    } 
} 

: हालांकि, केवल पढ़ने के लिए सत्र अजीब एक छोटे से व्यवहार करने के लिए दिखाई देते हैं। अजीब बात यह है कि सेट भी करता है: मैं ~/नमूना/सेटटेस्ट पर जाता हूं? Value = foo और यह अपवाद नहीं फेंकता है, वास्तव में यह "foo" देता है। अगर मैं ~/नमूना/सेटटेस्ट? मूल्य = बार और फिर ~/नमूना/टेस्ट मुझे "बार" मिलता है, यह दर्शाता है कि सत्र लिखा गया है।

तो SessionStateBehavior.ReadOnly में मैंने सफलतापूर्वक सत्र में लिखा है और अपना मूल्य वापस पढ़ा है।

मुझे लगता है कि यह तीन चीजों की वजह से एक हो सकता है:

  • MVC 3 में [SessionState(SessionStateBehavior.ReadOnly)] टूट गया है/नजरअंदाज कर दिया।
  • [SessionState] सत्र लिखा गया है और लिखने योग्य बनने पर ओवरराइड किया गया है।
  • SessionStateBehavior.ReadOnly वास्तव में किसी प्रकार की गंदे/आशावादी पहुंच को इंगित करता है।

किसी को भी इस बात की पुष्टि कर सकते हैं?

मुझे संदेह है कि custom session provider documentation के आधार पर अंतिम व्यक्ति सत्य है - यदि यह है तो कार्यान्वयन कैसे कार्य करता है? क्या 'केवल पढ़ने' सत्र में लिखना जोखिम जोखिम त्रुटियों (यानी अंतिम लेखन जीत) या क्या यह भ्रष्ट सत्रों और अपवाद तोड़ने का जोखिम उठाता है?

अद्यतन

यह इस तरह दिखता है डिजाइन (Microsoft's docs से) के द्वारा होता है:

ध्यान दें कि भले ही EnableSessionState विशेषता ReadOnly के रूप में चिह्नित किया जाता है, उसी में अन्य ASP.NET पृष्ठों एप्लिकेशन सत्र स्टोर पर लिखने में सक्षम हो सकता है, इसलिए स्टोर से केवल पढ़ने के सत्र डेटा के लिए अनुरोध लॉक किए गए डेटा को मुक्त करने के लिए प्रतीक्षा कर सकता है।

ऐसा लगता है कि उपरोक्त दूसरा विकल्प वास्तव में क्या करता है - सत्र लॉक हो गया है और मोड लिखने योग्य हो गया है।

उत्तर

9

~/नमूना/SetTest? मूल्य = foo

हाँ, यह किसी भी त्रुटि फेंक नहीं होगा, लेकिन यह भी अनुरोध के अंत में सत्र जारी रहती है नहीं किया।डिज़ाइन करके किसी भी चीज जिसे आप सत्र में लिखते हैं, अपडेट जीवन के चक्र के बहुत ही अंत में अपडेट हो जाता है (केवल सत्र लिखने योग्य होता है)।

मेरे परीक्षण में ~/नमूना/टेस्ट कुछ भी नहीं देता है।

मुझे लगता है कि जब सत्र पढ़ा जाता है तो उन्हें यहां तेजी से विफल होना चाहिए था।

तरीका है अपने नमूना फिर से लिखा जा करने के लिए

string test = (string)this.Session["test"]; 
+0

हम्म जरूरत रखकर नमूना यहाँ मैं क्या कर रहा हूँ के लिए कोड सरल है, लेकिन मैं सत्र के लिए लिखा हो रही है - बुला _ ~/नमूना/SetTest ? value = foo_ और फिर _ ~/नमूना/test_ मेरे लिए "foo" लौटा रहा है। वास्तव में यह त्रुटि होनी चाहिए, और यदि नहीं, तो इसे सत्र को सहेजने में असफल होना चाहिए, लेकिन यह निश्चित रूप से मेरे लिए बचत कर रहा है। – Keith

+0

आप सही हैं, प्रश्न में मेरा नमूना उम्मीद के अनुसार सत्र में लिखने में विफल रहता है। प्रश्न यह है कि मेरा ऐप अभी भी इसे लिखने में सक्षम क्यों है? मुझे पता चलेगा कि क्या अलग है और प्रश्न को अपडेट करें ... – Keith

+0

जैसा कि मैंने ऊपर दिए गए मेरे उत्तर में उल्लेख किया है, जब सत्र केवल पढ़ने के लिए और जब आप इसे अपडेट कर रहे होते हैं तो वे तेज़ी से विफल नहीं होते हैं। फ्रेमवर्क अनुरोध के अंत में सत्र अपडेट को अनदेखा कर रहा है। इस बीच वे आपको सत्र संरचना को संशोधित करने की अनुमति देते हैं, वैसे भी आप इसे पसंद करते हैं। – chandmk