2011-03-11 16 views
6

मैं एएसपी.NET लॉगिन नियंत्रण का उपयोग कर रहा हूं। मैं प्रत्येक उपयोगकर्ता के लिए अलग-अलग फॉर्म प्रमाणीकरण के लिए टाइमआउट सेट करने में सक्षम होना चाहता हूं (web.config में वैश्विक रूप से)। जो मैं समझता हूं उससे यह करने का एकमात्र तरीका प्रमाणीकरण टिकट पर मैन्युअल रूप से टाइमआउट सेट करना है। लॉगिन नियंत्रण का उपयोग करते समय ऐसा करने का कोई तरीका है? ऐसा लगता है कि लॉग इन कंट्रोल इस सब को दूर करता है। मुझे आशा है कि लॉगिन नियंत्रण का उपयोग जारी रखने का कोई तरीका है, लेकिन प्रत्येक उपयोगकर्ता के लिए फॉर्म प्रमाणीकरण टाइमआउट को अलग-अलग सेट करने की क्षमता भी है।क्या ASP.NET लॉगिन नियंत्रण का उपयोग करते समय प्रमाणीकरण टिकट मैन्युअल रूप से सेट करना संभव है?

धन्यवाद, कोरी

उत्तर

7

MSDN says का उपयोग कर:

LoggedIn घटना प्रमाणीकरण प्रदाता चेकों के बाद उठाया है उपयोगकर्ता के क्रेडेंशियल्स और प्रमाणीकरण कुकी पर कतारबद्ध है अगले प्रतिक्रिया में ब्राउज़र को भेजें। उपयोगकर्ता प्रमाणीकृत होने के बाद, पर 0,प्रति-उपयोगकर्ता डेटा तक पहुंचने के लिए लॉग इनइन ईवेंट का उपयोग करें।

तो यह घटना कुकीज़ को बदलने के लिए सही जगह प्रतीत होती है। सबसे पहले, कुकी जरूरत पुनः प्राप्त किया जा करने के लिए और decrypted:

सही इस के बाद
HttpCookie authCookie = Response.Cookies[FormsAuthentication.FormsCookieName]; 
FormsAuthenticationTicket oldAuthTicket = 
    FormsAuthentication.Decrypt(authCookie.Value); 

, नया प्रमाणीकरण सिर्फ निकाले के आधार पर टिकट बनाया जाना चाहिए:

FormsAuthenticationTicket newAuthTicket = new FormsAuthenticationTicket(
    oldAuthTicket.Version, 
    oldAuthTicket.Name, 
    DateTime.Now, 
    DateTime.Now.Add(timeoutForUser), 
    oldAuthTicket.IsPersistent, 
    oldAuthTicket.UserData, 
    FormsAuthentication.FormsCookiePath 
); 

यहाँ timeoutForUser एक TimeSpan मूल्य कि रखती है उपयोगकर्ता के लिए सत्र समय समाप्ति।

और अंत में, जवाब में पुरानी कुकी नए के साथ प्रतिस्थापित किया जाना चाहिए:

string encryptedTicket = FormsAuthentication.Encrypt(authTicket); 
authCookie = 
    new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); 
HttpContext.Current.Response.Cookies.Set(authCookie); 

इस चाल करना चाहिए।

+0

धन्यवाद! यह पूरी तरह से काम किया। आप एक आदमी! –

1

लॉगिन नियंत्रण LoggingIn और LoggedIn देता है जिन्हें आप अपने आप को प्रमाणीकरण को संभालने के लिए इस्तेमाल कर सकते हैं है।

आप e.Cancel = True की स्थापना करके LoggingIn घटना में प्रवेश प्रक्रिया रद्द कर सकते हैं और फिर स्वयं एक टिकट बनाने नई new FormsAuthenticationTicket(...)

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