फिर भी फॉर्म प्रमाणीकरण टिकट के साथ एक और समस्या जल्द ही समाप्त हो रही है। मुझे स्लाइडिंग समाप्ति सेट को सही पर उपयोग करने की आवश्यकता है। मैंने फ़ोरम पढ़े हैं और परिशुद्धता के नुकसान के साथ समस्या को समझ लिया है, कि टिकट केवल तभी अपडेट हो जाता है जब अनुरोध केवल समाप्ति समय के आधे के बाद किया जाता है।मैन्युअल रूप से फॉर्म प्रमाणीकरण टिकट नवीनीकरण:
समस्या:
<authentication mode="Forms">
<forms timeout="20" name="SqlAuthCookie" protection="All" slidingExpiration="true" />
</authentication>
<sessionState timeout="20" />
<authorization>
उपयोगकर्ता केवल लॉग आउट और, Login.aspx पर पुनः निर्देशित केवल जब वहाँ 20 मिनट के अंतराल में किए गए कोई अनुरोध किया जाना चाहिए था: मेरी webconfig में मैं इस प्रकार की है। समस्या यह है कि उपयोगकर्ता अनुरोध कर रहे हैं, और फिर भी लॉगिन पृष्ठ पर फेंक दिया जाता है। ऐसा न हो कि। मैंने जो करने का सोचा था, वह प्रत्येक अनुरोध के लिए मैन्युअल रूप से SqlAuthCookie को रीसेट करना था।
नीचे मेरा कोड है। इसे संदर्भ पर कहा जाता है। AcquireRequestState।
void context_AcquireRequestState(object sender, EventArgs e)
{
HttpContext ctx = HttpContext.Current;
ResetAuthCookie(ctx);
}
private void ResetAuthCookie(HttpContext ctx)
{
HttpCookie authCookie = ctx.Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie == null)
return;
FormsAuthenticationTicket ticketOld = FormsAuthentication.Decrypt(authCookie.Value);
if (ticketOld == null)
return;
if (ticketOld.Expired)
return;
FormsAuthenticationTicket ticketNew = null;
if (FormsAuthentication.SlidingExpiration)
ticketNew = FormsAuthentication.RenewTicketIfOld(ticketOld);
if (ticketNew != ticketOld)
StoreNewCookie(ticketNew, authCookie, ctx);
}
private void StoreNewCookie(FormsAuthenticationTicket ticketNew, HttpCookie authCookie, HttpContext ctx)
{
string hash = FormsAuthentication.Encrypt(ticketNew);
if (ticketNew.IsPersistent)
authCookie.Expires = ticketNew.Expiration;
authCookie.Value = hash;
authCookie.HttpOnly = true;
ctx.Response.Cookies.Add(authCookie);
}
मेरे प्रश्न हैं:
- यह प्रत्येक अनुरोध पर कुकी को रीसेट गलत या एक स्वीकार्य समाधान है?
- यह अभी भी क्यों काम नहीं करता है? ऐसा लगता है कि नया टिकट कभी नवीनीकृत नहीं होता है।
- क्या अन्य कारण संभव हैं, इस तथ्य के लिए कि उपयोगकर्ताओं के पास उनके फॉर्म प्रमाणीकरण बहुत जल्द समाप्त हो गए हैं, मुझे जांच करनी चाहिए?
धन्यवाद, सादर,
ढांचे और आईआईएस का आप किस संस्करण का उपयोग कर रहे हैं? प्रोजेक्ट के लिए –
लक्ष्य ढांचा 4.0 है। आईआईएस संस्करण 7 है, लेकिन मैं विजुअल स्टूडियो 2010 में अंतर्निहित वेबसर्वर –
पर परीक्षण कर रहा हूं, मुझे लगता है कि आपको फॉर्म टैग में डोमेन विशेषता देना चाहिए। प्रत्येक अनुरोध पर नवीनीकरण कुकी लिखने की कोई आवश्यकता नहीं –