2009-09-02 9 views
8

एएसपी.नेट एमवीसी ऐप्स में से एक में हम उपयोगकर्ता को स्वचालित रूप से लॉगऑफ करना चाहते हैं यदि वह उस ब्राउज़र टैब को बंद कर देता है जिसमें ऐप खोला जाता है।ब्राउज़र टैब पृष्ठ बंद होने पर लॉगऑफ उपयोगकर्ता, एएसपी.नेट एमवीसी

हम प्रमाणीकरण करते समय निम्न कोड का उपयोग कर रहे हैं।

FormsAuthentication.SetAuthCookie (उपयोगकर्ता नाम, गलत)

फिलहाल, अगर हम ब्राउज़र विंडो बंद कर देता है और इसे पुन: लॉन्च, उन फिर से प्रमाणित करने के लिए कहा जाता है। लेकिन हम उपयोगकर्ताओं को टैब को बंद करने और किसी भी वेबसाइट यूआरएल तक पहुंचने का प्रयास करने के लिए फिर से प्रमाणीकृत करने के लिए कहना चाहते हैं।

+4

मैं इस सुविधा पर सवाल करता हूं। क्या होगा यदि उपयोगकर्ता की साइट दो टैब में खुलती है, और एक बंद हो जाती है? –

+2

ऐसा करने का कोई भरोसेमंद तरीका नहीं है और मुझे इस तरह की * फीचर * को लागू करने का कोई कारण नहीं दिख रहा है। –

उत्तर

6

हमने कुकी कम प्रमाणीकरण का उपयोग करने का निर्णय लिया ताकि प्रमाणीकरण टोकन यूआरएल का हिस्सा हो। जब टैब बंद हो जाता है और वे वेबसाइट को फिर से खोलते हैं, तो उन्हें फिर से प्रमाणीकृत करने के लिए कहा जाएगा :)

+4

मुझे डर है कि यह एसईओ पहलू में एक अच्छा दृष्टिकोण नहीं हो सकता है। –

+13

इसका मतलब है कि प्रमाणीकरण टोकन बहुत अधिक स्थानों में सहेजे जा रहे हैं, फिर आप उम्मीद करते हैं - कई कॉर्पोरेट फ़ायरवॉल और अन्य फ़िल्टर यूआरएल लॉग करते हैं। यहां तक ​​कि आपके स्वयं के वेबसाइट लॉग भी उन्हें दिखाएंगे (जिसका अर्थ है कि आपने मानक फ़ाइल आईआईएस/अपाचे लॉग फ़ाइल से यूआरएल की प्रतिलिपि बनाकर उपयोगकर्ताओं को प्रतिरूपण करने की क्षमता के साथ किसी भी नेटवर्क एडमिन या डेटा सेंटर कर्मचारी को दिया है) – David

3

मैं इस अपने आप को प्रयास नहीं किया है, लेकिन मुझे लगता है कि निम्नलिखित दृष्टिकोण से काम करना चाहिए:

क्लाइंट पक्ष पर, आप एक जावास्क्रिप्ट समारोह है कि आपके सर्वर साइड कहेंगे शुरू करने के लिए अपने दस्तावेज़ के ऑनअनलोड घटना का उपयोग कर सकते AJAX के माध्यम से साइनआउट विधि।

सर्वर की तरफ, आपके पास एक्शन विधि कॉल फॉर्म्स प्रमाणीकरण। साइनऑट() और सत्र। एबैंडन() होना चाहिए;

+5

इसके साथ सावधान रहें, हालांकि, पेज से दूर नेविगेट करते समय ऑनलोड लोड होता है। और जहां तक ​​मुझे पता है, यह जांचने का कोई तरीका नहीं है कि उपयोगकर्ता नेविगेट कर रहा है या बंद कर रहा है ... – peirix

+0

वेबसाइट के प्रत्येक पृष्ठ पर जाने से पहले अनलोड को निकाल दिया जाता है। लेकिन मैं टैब को बंद करना चाहता हूं। – Gopinath

+1

क्षमा करें, मैं भूल गया था कि आप एक AJAX वेबसाइट नहीं लिख रहे हैं। मैं AJAX कॉल (कस्टम-निर्मित jquery प्लगइन का उपयोग करके) के माध्यम से सभी नई सामग्री लोड कर रहा हूं, इसलिए टैब या विंडो बंद होने पर मुझे केवल एक अनलोड प्राप्त होता है। –

3

एक ब्राउज़र सभी सत्र स्कोप्ड ऑब्जेक्ट्स को केवल तभी बंद कर देता है जब यह पूरी तरह से बंद हो, और जब कोई व्यक्तिगत टैब बंद न हो।

एक बहुत ही कम सत्र टाइमआउट का उपयोग करने का एक तरीका हो सकता है और पृष्ठ पर किसी ऑब्जेक्ट को हिट करने के लिए प्रत्येक कुछ सेकंड में सर्वर-साइड स्क्रिप्ट पोल होता है। यह सत्र समय फिर से बढ़ाएगा। तो यदि कोई टैब बंद है, तो स्क्रिप्ट उस ऑब्जेक्ट को नहीं ढूंढ सकती जिससे इस सत्र को समय-समय पर अनुमति मिल सके। यहां एक समस्या यह है कि यदि आपका ऐप बहुत अधिक लोड पर है, तो आपका ऐप स्वयं ही कर सकता है!

1

असल में कोई उपयोगकर्ता नहीं है जब उपयोगकर्ता ब्राउज़र टैब को बंद कर देता है तो उपयोगकर्ता लॉगऑफ कर सकता है। इसके लिए एकमात्र तरीका यह जांचना है कि जब उपयोगकर्ता नियंत्रक में लॉगऑन विधि को कॉल करते हैं तो उपयोगकर्ता को प्रमाणित किया जाता है या नहीं।

इस कोड मैं इसे कैसे ASP.Net MVC 3.

public ActionResult LogOn() 
     { 
      if (Request.IsAuthenticated) 
      { 
       FormsAuthentication.SignOut(); 
       return RedirectToAction("Index","ProductManager"); 
      } 
      return View();   
     } 
2

में क्या आप बस सत्र चर का उपयोग स्वचालित रूप से किसी को भी सुरक्षित गंतव्य पृष्ठ पर लौटने की कोशिश कर रहा लॉग ऑफ करने के लिए कर सकते हैं का एक उदाहरण है। एक एकल सत्र चर (पूर्णांक या बूलियन) बनाएं और अपने लॉगिन बटन की ऑनक्लिक घटना में इसे एक ज्ञात स्थिति में रीसेट करें, यह स्वीकार करने के बाद कि उपयोगकर्ता के पास वैध प्रमाण पत्र है, फिर उस पृष्ठ के पृष्ठ_लोड ईवेंट में उस सत्र चर को सेट या बढ़ाएं सुरक्षित करना। इन मानों का परीक्षण करें और उपयोगकर्ता को साइनआउट करें यदि वह पृष्ठ पर वापस लौटने की कोशिश कर रहा है या अन्यथा कुछ भी नहीं करता है। कोड इस तरह दिख सकता है।

protected void btnLogin_Click(object sender, EventArgs e) 
{ 
     if (IsAuthenticated == true) 
     Session["IsUserLoggedIn"] = (int)0; 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (HttpContext.Current.User.Identity.IsAuthenticated == true) 
       { 
         if (Session["IsUserLoggedIn"] != null) 
         { 
           int IsUserLoggedIn = (int)Session["IsUserLoggedIn"]; 
           if (IsUserLoggedIn <= 0) 
           { 
             Session["IsUserLoggedIn"] = (int)IsUserLoggedIn + 1; 
           } 
           else 
           { 
             Session["IsUserLoggedIn"] = (int)0; 
             FormsAuthentication.SignOut(); 
             FormsAuthentication.RedirectToLoginPage(); 
           } 
         } 
       } 
       else { Session["IsUserLoggedIn"] = (int)0; } 
     } 
+0

इस दृष्टिकोण में गंभीर बग है । लॉगिन के बाद यदि मैं होम पेज रीफ्रेश करता हूं जहां उपरोक्त पेज_लोड में लागू किया गया है, तो यह मुझे लॉगआउट करता है। –

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