2010-11-15 20 views
13

मैं वीएस -2010 का उपयोग कर रहा हूं और एक सरल एएसपी बनाया है। इसका परीक्षण करने के लिए विकास सर्वर का उपयोग कर वेब फॉर्म एप्लिकेशन।
मैं उपयोगकर्ता डेटा को संग्रहीत करने का प्रयास करता हूं - सत्र में सर्वर से पूछताछ, क्योंकि मैं प्रत्येक अनुरोध में डेटाबेस तक नहीं पहुंचना चाहता हूं। मैं 'Application_AuthenticateRequest' और 'सत्र_स्टार्ट' विधियों का उपयोग कर रहा हूं।
पहला दौर: प्रमाणीकरणRequest कहा जाता है। निम्नलिखित कोड चलाया गया:ग्लोबल.एक्सएक्स में क्यों HttpContext.Current.Session शून्य है?

public static void Initialize(string login_name, bool force_refresh) 
    { 
     HttpSessionState Session = HttpContext.Current.Session; 
     object o = Session == null ? null : Session["EMPLOYEE_DATA"]; 
     if (force_refresh || o == null || o.GetType() != typeof(Employee) || (o as Employee).login_name!= login_name) 
     { 
     _current = UIManager.GetEmployee(login_name); 
     if (Session != null) 
     { 
      Session["EMPLOYEE_DATA"] = _current; 
     } 
     } 
     else 
     { 
     _current = (Employee)o; 
     } 
    } 

_current चर एक स्थिर स्थैतिक क्षेत्र है जो स्थिर संपत्ति के माध्यम से प्रकाशित होता है। पहले दौर में सत्र शून्य है, और मुझे लगता है कि यह ठीक है क्योंकि सत्र_स्टार्ट अभी तक नहीं बुलाया गया है। session_start इस तरह दिखता है:

protected void Session_Start(object sender, EventArgs e) 
{ 
    Session["EMPLOYEE_DATA"] = EmployeeFactory.Current; 
} 

अगले दौर session_start निश्चित रूप से नहीं कहा है, लेकिन AuthenticateRequest में मैं सत्र के लिए उपयोग नहीं कर सकते हैं। HttpContext.Current.Session शून्य है और यह। सत्र संदर्भ एक HttpException फेंक कहते हैं "सत्र राज्य इस संदर्भ में उपलब्ध नहीं है"।

हालांकि मैं किसी भी पेज_लोड घटनाओं से सत्र तक पहुंच सकता हूं लेकिन यह एक बुरा अभ्यास है, मुझे लगता है कि मैंने प्रत्येक पृष्ठ_लोड प्रमाणीकरण रखा है। कोई विचार मैं सत्र तक कैसे पहुंच सकता हूं?

सलाह के लिए धन्यवाद,
Péter

उत्तर

32

आप becauase यह कि इस समय के लिए बाध्य नहीं कर रहा है Application_AuthenticateRequest पर सत्र का उपयोग करने में सक्षम नहीं हैं।

मुझे लगता है कि आप इस कार्यक्रम का उपयोग करने में सक्षम हैं Application_AququireRequestState।

+0

+1 में नीचे दिए गए कोड का उपयोग करने की कोशिश - मैं मूल प्रश्न से काफी करीबी पढ़ नहीं किया। –

+0

धन्यवाद। यह समाधान था। –

+2

@ टोरबॉर्न हंससन: कभी-कभी यह शून्य है, क्या आपको कोई विचार है कि क्यों? – Homam

-1

Page_Load

Response.AppendHeader("Refresh", Convert.ToString(Session.Timeout * 15) + "; 
URL=SessionExpPage.aspx"); 
संबंधित मुद्दे