2009-11-10 6 views
6

मैं से डेमो एकल साइन-ऑन का इस्तेमाल किया:एकल साइन-ऑन प्रस्थान करें समस्या: FormsAuthentication.SignOut() काम नहीं कर रहा

और मैं इस डेमो के लिए एक प्रस्थान करें समारोह को जोड़ने, लेकिन एक समस्या दिखाई दी:

जब मैं कुकी सेट करता हूं। डोमेन, फॉर्म प्रमाणीकरण। साइनऑट() काम नहीं कर रहा है और कुकी को साफ़ नहीं किया जा सकता है।

यदि कुकी को कुकी सेट नहीं किया गया है। डोमेन, फॉर्म प्रमाणीकरण। साइनऑट() काम करता है।

मैंने सी # एएसपीनेट का उपयोग किया।

और क्या कोई मुझे एएसपीनेट का उपयोग करके कुछ सरल और व्यावहारिक एकल साइन-ऑन और सिंगल साइन-ऑफ समाधान बता सकता है?

उत्तर

4

यदि आप एक ही डोमेन और उप डोमेन के लिए प्रमाणीकरण का उपयोग कर रहे हैं, तो कोड के माध्यम से डोमेन जोड़ने के बजाय web.config में डोमेन नाम जोड़ने का प्रयास करें। आप कोई अगर आप इस web.config प्रविष्टि

<authentication mode="Forms"> 

    <forms loginUrl="~/Account/LogOn" timeout="2880" domain="abc.com"/> 

</authentication> 

इस प्रविष्टि asp.net इंजन है कि प्रमाणीकरण कुकी abc.com के सभी उप डोमेन के लिए उपयोग किया जाएगा बताता है का उपयोग कुछ भी कोड करने के लिए होगा। इसका उपयोग करने का प्रयास करें और देखें कि यह काम करता है या नहीं।

+0

हाँ। यह पूरी तरह से काम करता है। बहुत बहुत धन्यवाद। – Mike108

1

यह मेरे लिए काम किया:

प्रत्येक साइट के लॉगआउट घटना/विधि में, अनुरोध वस्तु & में कुकीज़ संग्रह का उपयोग नीचे के रूप में प्रासंगिक कुकीज़ हटाएँ:

enter code hereHttpCookie cookie = Request.Cookies.Get(".CommonCookieName"); 
cookie.Expires = DateTime.Now.AddDays(-1); 
HttpContext.Current.Response.Cookies.Add(cookie); 

तो एसएसओ की सभी साइट्स उसी कुकी का उपयोग करें, फिर ऊपर वर्णित यह सरल है। यदि एसएसओ में भाग लेने वाली कुछ या प्रत्येक साइट एक ही विषय (व्यक्ति) के लिए अपनी कुकी/उपयोगकर्ता नाम का उपयोग करती है, तो आपको सभी कुकीज़ को हटाने की आवश्यकता है। (शायद साइटों की एसएसओ संग्रह में प्रत्येक साइट में उपयोगकर्ता नाम & कुकी नामों में से सिर्फ मानचित्रण के साथ एक केंद्रीय स्थान की स्थापना।

+0

इस विकल्प के लिए धन्यवाद - यह मुझे ओपनआईडी के लिए डॉटनेट ओपेनएथ का उपयोग करके साइट पर भी आवश्यक था। –

0

यह काम करता है के लिए मुझे

public virtual ActionResult LogOff() 
    { 
     FormsAuthentication.SignOut(); 
     foreach (var cookie in Request.Cookies.AllKeys) 
     { 
      Request.Cookies.Remove(cookie); 
     } 
     foreach (var cookie in Response.Cookies.AllKeys) 
     { 
      Response.Cookies.Remove(cookie); 
     } 
     return RedirectToAction(MVC.Home.Index()); 
    } 
+0

यह कोई समझ नहीं आता है। जब आप उस विधि को दबाते हैं (जैसे आपकी साइट से लॉग आउट करना), तो आप सभी कुकीज़ को नष्ट कर रहे हैं उपयोगकर्ता का पीसी, न केवल आपकी वेबसाइट से संबंधित। – RPM1984

+1

@ RPM1984 ब्राउज़र आपको अन्य साइटों द्वारा बनाई गई कुकीज़ को हटाने की अनुमति नहीं दे सकता है। –

+0

@Aros - ठीक है, ठीक है, "नहीं होना चाहिए", लेकिन यह परिवर्तन क्यों लेते हैं? इसके अलावा यदि आपकी साइट में "अन्य" कुकीज़ हैं तो क्या होगा? यह उन्हें भी उड़ा देगा। लॉग ऑफ केवल प्रमाणीकरण कुकी को नष्ट करना चाहिए। – RPM1984

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