2009-01-09 17 views
7

जब मेरा एएसपी.Net सत्र समय समाप्त होता है (और प्रमाणीकरण भी बनाता है) और मैं एक पृष्ठ को हिट करने का प्रयास करता हूं, तो मुझे स्वचालित रूप से मेरे डिफ़ॉल्ट login.aspx पृष्ठ पर रीडायरेक्ट कर दिया जाता है।एएसपी.Net सत्र टाइमआउट पहचान: सत्र है। नया सत्र और सत्र कुकी यह करने का सबसे अच्छा तरीका है?

पेज लोड से पहले मुझे यह निर्धारित करने की आवश्यकता है कि यह एक टाइमआउट स्थिति है और यदि ऐसा है - टाइमआउट.एएसपीएक्स पर रीडायरेक्ट करें।

नीचे दिए गए लेख निर्दिष्ट करते हैं कि यदि IsNewSession सत्य है, और एक sessionID कुकी मौजूद है - तो आपके पास टाइमआउट स्थिति है।

हालांकि मेरे परीक्षण में मेरे पास ऐसी स्थिति है जहां मैं टाइमआउट करता हूं और फिर से लॉग इन करने का प्रयास करता हूं और IsNewSession सत्य के बराबर है और सत्र आईडी कुकी अभी भी लटक रही है (क्योंकि यह पूरे ब्राउज़र सत्र के लिए रहता है), इसलिए यह कहता है जब मैं बस वापस लॉग इन करने की कोशिश कर रहा हूं तो मैंने फिर से समय निकाल दिया है।

क्या यह सब करने का कोई बेहतर तरीका है?

तकनीक here और here निर्धारित की गई है।

मेरे 'Global.asax' फ़ाइल में मेरे पास है:

void Application_PreRequestHandlerExecute(object sender, EventArgs e) 
{ 
     // Check if session state is enabled in web.config 
     if (Context.Session == null) return; 

     if (Session["user"] == null) 
     { 
      if (Session.IsNewSession) 
      {      
       HttpCookie sessionCookie = Request.Cookies["ASP.NET_SessionId"]; 
       if ((null != sessionCookie) && !string.IsNullOrEmpty(sessionCookie.Value)) 
       { 
        /* Session Timeout! */ 
        FormsAuthentication.SignOut(); //just in case not done yet 
        Session.Abandon(); 
        Response.Redirect("timeout.aspx"); 
       } 
       else 
       { 
        // Cookie didn't exist - must be a brand new login 
        return; 
       } 
      } 
      else 
      { 
       // If there is no session data and the session is not new then it must be the postback of the login screen. 
       if ((HttpContext.Current.Request.Path.ToLower().LastIndexOf("/login.aspx") >= 0) && (Request.HttpMethod == "POST")) 
       { 
        return; 
       } 
      } 
     }  
} 

उत्तर

7

आप समय समाप्त सत्र और एक सत्र था कि manully लॉग आउट के बीच अंतर करने की कोशिश कर रहे हैं?

आपकी समस्या यह है कि सत्र डेटा समाप्त होने के बाद आपको यह देखना है कि एक नया अनुरोध आने पर एक नया सत्र बनाया गया है और अनुरोध में आने वाले अनुरोध में सत्र आईडी कुकी है (यह दर्शाता है कि यह लॉग इन किया गया था से पहले)।

दो दृष्टिकोण हैं।

कुकी: अपने प्रवेश पृष्ठ में

सबसे पहले आप एक अतिरिक्त कुकी है कि उपयोगकर्ता के लॉगिन स्थिति को इंगित करता बना सकते हैं। जब उपयोगकर्ता मैन्युअल रूप से लॉग आउट को इंगित करता है तो कुकी मान को संशोधित करने के लिए संशोधित किया जाता है। सत्र के बाद एक अनुरोध का समय समाप्त हो गया है IsNewSession होने के अलावा सच्चाई में एक लॉगिन स्थिति कुकी भी होगी जिसमें उपयोगकर्ता अभी भी लॉग इन है, इस प्रकार यह इंगित करता है कि उपयोगकर्ता ने लॉगआउट करने के लिए मैन्युअल रूप से चुना नहीं है।

डेटाबेस:

एक दूसरा दृष्टिकोण स्थिति में लॉग इन के साथ एक डीबी तालिका में sessionIDs स्टोर करने के लिए है। जब एक लॉगऑन सफल होता है तो sessionIDOn सत्र तालिका में sessionID दर्ज करें। जब उपयोगकर्ता मैन्युअल रूप से लॉग ऑफ करता है तो तालिका से sessionID को हटा दें। इसलिए यदि आपके टाइमआउट डिटेक्शन में तालिका में सत्र आईडी का एक रूप शामिल हो सकता है, तो वर्तमान में यह एक टाइमआउट था (इस बिंदु पर आपको शायद आईडी को भी हटा देना चाहिए)।

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

मेरी वरीयता डेटाबेस दृष्टिकोण है जो मुझे कुकीज़ सेट करने से नफरत है क्योंकि यह मुझे परेशान करता है कि उस कुकी को हर अनुरोध के साथ भेजा जा रहा है लेकिन शायद ही कभी इसकी आवश्यकता है।

-1

आप टैग प्रमाणीकरण टैग के तहत आपको web.config फ़ाइल में भी देख सकते हैं।इस तरह यह कुछ दिखना चाहिए:

<authentication mode="Windows"> 
    <forms defaultUrl="Default.aspx" loginUrl="Login.aspx" name=".aspxAuth"> 
    </forms> 
</authentication> 

सूचना विशेषता मोड, यह शायद आप web.config फ़ाइल में खिड़की के बजाय फार्म कहते हैं। इस मामले में, यदि आप अपना सत्र खो देते हैं और फिर किसी भी लिंक पर क्लिक करें (मान लें SalesChart.aspx) एएसपी.नेट आपको सीधे salesChart.aspx codebehind के बजाय login.aspx codebehind पर ले जाएगा जो विशेष रूप से परेशान है।

यदि आप विंडोज मोड आज़माते हैं, तो आपको हर बार अनुरोधित पृष्ठ (SalesChart.aspx) पर ले जाया जाएगा, और उसके बाद निर्णय लें कि सत्र खो जाने पर क्या कदम उठाना है।

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