2011-02-03 17 views
17

मुझे जेनेरिक हैंडलर और अनाम पहचान के साथ कोई समस्या है।एएसपी.नेट जेनेरिक हैंडलर और सत्र

मूल रूप से यदि <anonymousIdentification enabled="true" /> वेब कॉन्फ़िगरेशन में चालू है, जब भी एक JQuery GET/POST अनुरोध सर्वर पर भेजा जाता है, तो वह अनुरोध किसी नए उपयोगकर्ता और नए उपयोगकर्ता सत्र के अंतर्गत निष्पादित करता है।

क्या इसे कम करने का कोई तरीका है? मुझे वर्तमान उपयोगकर्ता के सत्र चर का उपयोग करने की आवश्यकता है ... यह वास्तव में निराशाजनक है!

+0

मैं इसे की जाँच नहीं की है, लेकिन मुझे लगता है कि अगर आप एक jQuery अनुरोध प्राप्त भेज रहे हैं। क्लाइंट से इसे वर्तमान उपयोगकर्ता संदर्भ में संभाला जाता है .. फिडलर के साथ जांच करें सामान्य और jquery अनुरोध –

+0

दोनों के लिए एएसपीनेट सत्र कुकी समान है तो यदि आप अनौपचारिक आईडी बंद करते हैं तो यह काम करता है? क्या आप फॉर्म ऑथ का उपयोग कर रहे हैं? क्या आप web.config में उस विशेष पथ के लिए एनन बंद कर सकते हैं? – jcolebrand

+0

मैं कोशिश करता हूं और देखता हूं कि यह @drachenstern काम करता है या नहीं। आप गलत हैं @ शेखर_Pro। मैं सत्र में उपयोगकर्ता डेटा स्टोर करता हूं; एक मान UserRegistratinoState है। यदि मैं ऐसे पृष्ठ से आया हूं जहां उपयोगकर्ता ने सत्र में एनम मान पंजीकृत किया है तो उपयोगकर्ता पंजीकरण प्रमाणीकरण है। पंजीकृत। मैंने यह सत्यापित किया है। हालांकि, जब मैं किसी दूसरे पृष्ठ पर हैंडलर को जेएस से कॉल करता हूं, तो हैंडलर में कोड की पहली पंक्ति उस सत्र चर को जांचती है। यदि चर मौजूद नहीं है तो यह स्वचालित रूप से UserRegistrationState.Anonymous देता है। मुझे लगता है कि यह मानना ​​सुरक्षित है कि JQuery से अनुरोध प्राप्त करें एक नए उपयोगकर्ता के तहत निष्पादित कर रहे हैं। – bleepzter

उत्तर

38

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

+1

मैं इसे एक पल में कोशिश करूंगा। धन्यवाद @ जोश स्टोडोला – bleepzter

+2

पढ़ना चाहिए: ** पब्लिक क्लास सदस्य हैंडलर: IHttpHandler, IRequiresSessionState ** –

+0

मुझे समस्या थी कि हैंडलर ने सत्र कुकी को वापस नहीं भेजा था यदि हैंडलर के लिए अनुरोध वेबसाइट के लिए पहला था (कोई वास्तविक सत्र आईडी नहीं) और मैंने सोचा कि जब 'IReadOnlySessionState'' IRequireSessionState' से प्राप्त होता है जिसे खरीदा जाएगा। लेकिन मुझे वास्तव में 'IRequireSessionState' का स्पष्ट रूप से उपयोग करना पड़ा। उस पोस्ट के लिए धन्यवाद। – jgasiorowski

-2

मैं वेब ब्राउज़र में सुझाव देता हूं कि आप डेवलपर मोड में नेटवर्क टैब सक्षम करते हैं। फिर AJAX में चेक करें जो कुकी भेजी जाती है (यदि कोई हो)।

यदि आपको कोई कुकी नहीं दिखाई देती है, तो इसका मतलब है कि ब्राउज़र को कोई सत्र नहीं मिला है, इस प्रकार आपको सही इंटरफेस प्राप्त करने और कुकी तक पहुंचने के लिए सुनिश्चित करना चाहिए (जोश द्वारा बताए गए अनुसार)। ,

आदेश में कुकी उत्पन्न करने के लिए (Don'f System.Web.SessionState उपयोग करने के लिए भूल जाते हैं) सत्र वस्तु की sessionID का उपयोग:

string sesId = context.Session.SessionID; 

इससे पहले कि आप प्रतिक्रिया के लिए कुछ भी लिखें।

+1

-1 कुकीज सत्र सत्र के लिए यह बहुत संभव और व्यावहारिक है, और पहचानकर्ता तक पहुंच निश्चित रूप से कुकी –

+0

"जेनरेट नहीं" करती है, जो मैंने नहीं कहा, फिर से पढ़ें। –

+0

मैंने इसे तीन बार पढ़ा। मुझे इसे फिर से पढ़ने की जरूरत नहीं है। –

1

आप इस का उपयोग कर सकते हैं:

public class Handler : 
    IHttpHandler, 
    System.Web.SessionState.IReadOnlySessionState 
11

लागू System.Web.SessionState.IRequiresSessionState इंटरफ़ेस:

public class Handler : IHttpHandler, System.Web.SessionState.IRequiresSessionState 
{ 
    public void ProcessRequest(HttpContext context) 
    {  
    context.Session["StackOverflow"] = "overflowing";  
    context.Response.Redirect("~/AnotherPage.aspx");  
    } 

} 
+0

मैं जेनेरिक हैंडलर में सत्र कुंजी को प्राथमिक कुंजी के विरुद्ध छवि अपलोड करने के लिए सत्र मान प्राप्त करना चाहता हूं, जिसे मैंने सत्र में संग्रहीत किया है, मैं jquery image upload प्लगइन का उपयोग कर रहा हूं और यह दस्तावेज़ पर सभी गुणों को बाध्य करता है। मैंने अपने हैंडलर कोड में iRequiresSessionState का उपयोग किया लेकिन फिर भी मैं सत्र मानों तक नहीं पहुंच सकता। सत्र कुंजी अभी भी 0 हैं। क्या कोई मुझे इस बारे में बता सकता है? –

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