2011-06-01 12 views
9

पर मिश्रित सत्र मैं कुछ महीने पहले कंपनी छोड़ने वाले मेरे सहयोगियों में से एक द्वारा बनाई गई पुरानी एएसपीनेट साइट से एक समस्या का विश्लेषण कर रहा हूं।एएसपीनेट साइट

समस्या यह है कि हम कई बार expierenced है कि दो उपयोगकर्ताओं सत्र, मिश्रित कर रहे हैं ताकि अगर उदाहरण के लिए दो उपयोगकर्ताओं में लॉग इन किया, एक उपयोगकर्ता अन्य उपयोगकर्ताओं के डेटा को देखता है। चूंकि यह बहुत ही कम होता है (एक महीने या तो एक बार में) यह पता लगाना मुश्किल है कि क्या गलत है।

मैं अब प्रमाणीकरण के लिए अपने कोड के माध्यम से कदम रखा है और यह इस प्रकार है:

  1. उपयोगकर्ता एक MySQL में कोड की जाँच करता masterpage पर
  2. प्रस्तुत Page_Load पर सार्वजनिक पेज और प्रेस पर उपयोगकर्ता नाम/पासवर्ड दर्ज डेटाबेस है कि उपयोगकर्ता नाम/पासवर्ड मान्य है, आदि समाप्त हो गई है और एक अद्वितीय userid अगर ठीक
  3. पेज तो इस तरह सत्र में loginpage बचाता वापस नहीं (बाद लॉगआउट के लिए इस्तेमाल किया): HttpContext.Current.Session(Consts.CCookieName_LoginUrl) = Request.RawUrl
  4. फिर userid इस तरह सहेजा जाता है: FormsAuthentication.SetAuthCookie(userid, False)
  5. फिर सुरक्षित क्षेत्र के लिए एक रीडायरेक्ट किया जाता है: userid = Context.User.Identity.Name
  6. उपयोगकर्ता डेटा लोड किया जाता है अनुसार: Context.Response.Redirect(secureurl, False)
  7. सुरक्षित क्षेत्र की masterpage की Page_Init में userid द्वारा पढ़ा जाता है उपयोगकर्ता आईडी
  8. उपयोगकर्ता सुरक्षित क्षेत्र, यानी। कदम 6 - 7 दोहराया है
  9. उपयोगकर्ता suddently एक और उन डेटा

मैं क्या गलत हो रहा है पर कुछ विचार है देखता है, लेकिन है, इसलिए कृपया किसी को भी कोड को संशोधित करने से पहले कुछ इनपुट चाहते हैं?

+0

हम भी एएसपीनेट फॉर्म प्रमाणीकरण का उपयोग करते हैं और इसके बारे में कम रिपोर्ट करते हैं, हम इस मुद्दे को दोबारा नहीं कर पाएंगे और दुर्भाग्य से इसे डीबग कर सकते हैं। मुझे आशा है कि कोई और कुछ और उपयोगी जोड़ सकता है। –

+1

इस स्वीकृत उत्तर पर एक नज़र डालें: http://stackoverflow.com/questions/6441182/aspx-global-instance-of-class-possible-bug-in-code-structure/6441357#6441357 मैं इस मुद्दे को हल करता हूं – Muleskinner

+0

क्या आप किसी भी प्रकार के कैशिंग का उपयोग कर रहे हैं? –

उत्तर

6

यहां बताना मुश्किल है। क्या आपने फॉर्म प्रमाणीकरण कॉन्फ़िगर किया है? प्रमाणीकरण प्रणाली अपने web.config आप सेटअप में:

इस प्रक्रिया को आप प्रपत्र प्रमाणीकरण के लिए पालन करना है

<authentication mode="Forms"> 
    <forms loginUrl="Login.aspx" defaultUrl="Home.aspx" timeout="30" slidingExpiration="true" /> 
</authentication> 

<authorization> 
    <deny users="?"/> 
</authorization> 

आपका प्रवेश पृष्ठ (के बाद वापस) क्रेडेंशियल्स (अपने गुरु नहीं की जाँच करता है पृष्ठ)। उपयोगकर्ता मान्य है, तो आप कुकी सेट:

FormsAuthentication.SetAuthCookie (userid, झूठी)

और एक अन्य पृष्ठ पर रीडायरेक्ट। अब, आप यहाँ कुकी पढ़ने अपने प्रमुख सेट करने के लिए: जाहिर है

protected void Application_AuthenticateRequest(Object sender, EventArgs e) { 
    if (HttpContext.Current.User != null) { 
     if (Request.IsAuthenticated == true) {  
      // Debug#1    
      FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(Context.Request.Cookies[FormsAuthentication.FormsCookieName].Value); 
      // In this case, ticket.UserData = "Admin"     
      string[] roles = new string[1] { ticket.UserData }; 
      FormsIdentity id = new FormsIdentity(ticket); 
      Context.User = new System.Security.Principal.GenericPrincipal(id, roles); 
      // Debug#2 
     } 
    } 
} 

, मैं सरल बना दिया है, लेकिन इस मार्ग आप चीजों को ठीक से करने के लिए पालन करने के लिए है।

+0

बहुत धन्यवाद, आपके इनपुट के अनुसार मेरा कोड साफ़ करें (इसे विशिष्ट समस्या हल करने के लिए विश्वास न करें तथापि)। – Muleskinner

+0

@Muleskinner: कोई समस्या नहीं। मुझे खुशी है कि मैं एक तरह से मदद कर सकता हूं। अपने विशिष्ट कोड को हल करने के लिए मुझे कोड को देखने की आवश्यकता हो सकती है। एक और बात मैं भूल गया। आपको Thread.CurrentPrincipal = HttpContext.Current.User को Xhalent के रूप में सेट करना होगा: http://stackoverflow.com/questions/6043100/asp-net-mvc-and-windows- प्रमाणीकरण-with- कस्टम- रोल – LeftyX

4

मैं किसी भी स्टैटिक्स है कि स्थिर नहीं होना चाहिए (और धागे/अनुरोध भर में सामग्रियों को साझा) के लिए इधर-उधर भटकने होगा।

शायद यह बिल्कुल प्रमाणीकरण नहीं है। क्या आपने उस गलत डेटा परिणाम के साथ Context.User.Identity.Name मूल्य डंपिंग करने का प्रयास किया है? क्या यह आपको गलत उपयोगकर्ता नाम भी देता है?

क्या आप समस्या को पुन: उत्पन्न कर सकते हैं जब आप गारंटी दे सकते हैं कि साइट पर केवल एक उपयोगकर्ता सक्रिय है?

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