2009-07-09 13 views
51

मेरे पास एक HttpHandler है जो क्लाइंट पेज पर चलाया जाता है (क्रॉस डोमेन, हमारे आईआईएस सर्वर पर नहीं, आदि) और जब वे हमारे एम्बेडेड लिंक पर क्लिक करते हैं तो यह हमारे सर्वर पर हैंडलर को बंद कर देता है। अब तक सब कुछ सामान्य रूप से काम कर रहा है।एक HttpHandler में ASP.NET सत्र राज्य का उपयोग कैसे करें?

अब मैं System.Web.HttpContext.Session ऑब्जेक्ट का उपयोग करने की कोशिश कर रहा हूं लेकिन यह शून्य है। मुझे लगता है कि यह शून्य है क्योंकि हमारे पास एक सत्र नहीं है जब तक कि हमारे HttpHandler को बुलाया नहीं जाता है? और हैंडलर को कई कॉल प्रति कॉल एक नया सत्र तैयार करेंगे? अगर ऐसा होता है तो एमएस ने एचटीपीएचंडलर में फोन करते समय सत्र ऑब्जेक्ट को अक्षम कर दिया है? क्या कोई इसकी पुष्टि कर सकता है?

यदि ऐसा है, तो आप कॉल के बीच राज्य को बनाए रखने के लिए क्या करते हैं? कुछ प्रकार के एसक्यूएल आधारित डेटा ऑब्जेक्ट? एक पंक्ति?

TIA

उत्तर

124

अपने HttpHandler लागू IRequiresSessionState है करने के लिए भी लिखने की एक्सेस दे देंगे जो लागू कर सकते हैं इंटरफ़ेस। यह सत्र राज्य के उपयोग को सक्षम करेगा। IRequiresSessionState System.Web.SessionState नामस्थान में पाया जा सकता है।

+1

@Michael होगा एक लाख साल :) धन्यवाद –

+0

कार्यान्वयन मेरे लिए काम किया है कि के बारे में सोचा की नहीं: सार्वजनिक कक्षा BasicHandler इम्प्लीमेन्ट्स IHttpHandler इम्प्लीमेन्ट्स IRequiresSessionState –

24

मुझे लगता है कि आप खाली इंटरफ़ेस IReadOnlySessionState लागू करने के लिए है, तो संदर्भ लोड किया जाएगा।

संपादित करें जोड़ने के लिए:

माइकल मॉर्टन के जवाब के अनुसार, आप भी IRequiresSessionState, आप सत्र वस्तु

+2

कई HttpHandler के लिए उपयोग करता IReadOnlySessionState सबसे अच्छा है, कम से कम जब एक ही सत्र स्थिति जाँच कर रहा है यह बचत नहीं है, लेकिन मुख्य कारण यह बेहतर है जवाब इसलिए है क्योंकि एक HttpHandler विरासत के बजाय IReadOnlySessionState या IRequiresSessionState लागू करता है (कक्षाएं केवल अन्य कक्षाओं से प्राप्त हो सकती हैं)। – JackArbiter

-10

वर्तमान संदर्भ का उपयोग करके देखें ...

System.Web.HttpContext.Current.Session 
+0

काम नहीं करता है, जब तक कि वह दोनों मार्कर इंटरफेस –

+1

में से एक को लागू करता है सत्र बिना आईआरक्वर्स सत्र/आईआरएडऑनली सत्र स्टेटस – Colin

+1

मेरा बुरा ... HttpModules के बारे में सोच रहा था। –

2
using System; 
using System.Web; 
using System.Web.SessionState; 
public class DownloadHandler : IHttpHandler, IReadOnlySessionState 
{ 
    public bool IsReusable { get { return true; } } 

    public void ProcessRequest(HttpContext context) 
    { 
     context.Response.Write(context.Session["kmx"]); 
    } 
} 
संबंधित मुद्दे