2009-03-17 15 views
7

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

सादर, Thurein

if (Context.Session != null && Session.IsNewSession && this.Request.IsAuthenticated) 
     { 
      string cookieHeader = Request.Headers["Cookie"]; 
      if (cookieHeader != null && cookieHeader.IndexOf("ASP.NET_SessionId") >= 0) 
      { 


        HttpContext.Current.Session.Abandon();      
        FormsAuthentication.SignOut();       
        Response.Redirect(FormsAuthentication.LoginUrl);           

      } 
     } 
+0

क्या यह कार्यक्षमता फॉर्म प्रमाणीकरण में किसी भी तरह से निर्मित नहीं है? –

+0

@Rob: हाँ, यह है। –

उत्तर

19

आप इस कार्यक्षमता के लिए किसी भी कस्टम कोड की जरूरत नहीं है, यह फ्रेमवर्क द्वारा समर्थित है। बस web.config में यह कॉन्फ़िगर करें:

<authentication mode="Forms"> 
    <forms defaultUrl="~/Default.aspx" 
     loginUrl="~/Login.aspx" 
     slidingExpiration="true" 
     timeout="60" /> 
</authentication> 
उपरोक्त कॉन्फ़िगरेशन के साथ

, उपयोगकर्ता हमेशा Login.aspx पृष्ठ पर पुनः निर्देशित किया जाएगा जब उनके सत्र समाप्त हो। 60 मिनट का समय समाप्ति होता है, और स्लाइडिंग समाप्ति का मतलब है कि प्रत्येक बार जब उपयोगकर्ता वेब एप्लिकेशन से अनुरोध करता है तो टाइमआउट बढ़ाया जाता है, इसलिए यदि वह सक्रिय रहता है तो सत्र समाप्त नहीं होगा। इस तरह की एक कॉन्फ़िगरेशन आपको एक और लाभ देता है जो आपने करने की कोशिश की - एक बार जब उपयोगकर्ता लॉग इन करता है तो वह स्वचालित रूप से उस संसाधन के लिए रीडायरेक्ट हो जाएगा जिसे उसने मूल रूप से अनुरोध किया था। और आप हमेशा इस व्यवहार को ओवरराइड और अनुकूलित कर सकते हैं।

+0

हाय पावेल क्राकोवियाक, मैं आपके उत्तर के लिए आपकी सराहना करता हूं। :) असल में, मैंने पहले से ही वही कॉन्फ़िगरेशन किया है जो आपने ऊपर वर्णित किया है। :(लेकिन मुझे नहीं पता कि पहले से मौजूद कार्यक्षमता को पूरा करने के लिए कस्टम कोडिंग करने के लिए मेरे दिमाग में क्या मिला है। सम्मान, Kyaw Thurein –

+0

मान लें कि ऐसा तब होता है जब वे किसी फ़ॉर्म पर सहेजें बटन पर क्लिक करते हैं एक पोस्टबैक, उन्हें पृष्ठ लॉगिन करने के लिए निर्देशित किया जाता है, फिर लॉगिन करें और मूल संसाधन पर वापस जाएं। क्या पोस्टबैक तब पूरा हो जाएगा ताकि फॉर्म डेटा सामान्य रूप से संसाधित किया जा सके? – AaronLS

+1

@Aaronls: नहीं, डेटा खो जाएगा। केवल अनुरोध किया गया यूआरएल याद किया जाता है। –

13

Pawel's answer आंशिक रूप से सही है, लेकिन आपको Session जीवनकाल को फॉर्म प्रमाणीकरण कुकी जीवनकाल से भी अधिक मूल्य तक सेट करने की आवश्यकता है। प्रपत्र प्रमाणीकरण timeout मान केवल प्रमाणीकरण कुकी के जीवनकाल को प्रभावित करता है। उदाहरण में उन्होंने प्रदान किया, प्रमाणीकरण कुकी जीवनकाल 60 मिनट है लेकिन डिफ़ॉल्ट सत्र जीवनकाल 20 मिनट है। यदि कोई उपयोगकर्ता 20 मिनट से अधिक समय तक अपनी मशीन छोड़ देता है तो उनके सत्र डेटा को त्याग दिया जाएगा, सत्र में संग्रहीत मूल्य को संदर्भित करने के बाद के प्रयासों के परिणामस्वरूप एक अपवाद फेंक दिया जाएगा (उदाहरण के लिए System.NullReferenceException.ToString() या कास्ट का प्रयास करने पर)।

आप अपने web.config फ़ाइल में sessionState सेटिंग के द्वारा अपने आवेदन में विश्व स्तर पर इस सेट कर सकते हैं:

<sessionState 
    mode="InProc" 
    cookieless="false" 
    timeout="70"/> 

सत्र टाइमआउट को पांच या दस मिनट जोड़ना एक अच्छा बफर प्रदान करता है।

+0

अतिरिक्त स्पष्टीकरण के लिए धन्यवाद। जब आप सत्र चर का उपयोग कर रहे हैं तो यह वास्तव में महत्वपूर्ण है। इससे पहले कि मैं उनका उपयोग करने की कोशिश करता हूं, मेरे पास सिर्फ अपने अस्तित्व/मूल्य की जांच करने की आदत है। ;) –

+1

मुझे पता है ... यह एक शर्म की बात है कि उनके पास साइनआउट नहीं है IfessionExpired = "true" सेटिंग। – Kev

+0

हाय केवी, मैं आपकी सलाह के लिए वास्तव में धन्यवाद देता हूं। सम्मान, थुरिन –

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