2012-12-25 22 views
6

में हैंडल सत्र टाइमआउट मेरे पास एक ऐसा एप्लिकेशन है जहां लगभग 20 http generic handlerajax call के लिए उपयोग किया जाता है।
मैंने अपने हैंडलर में सत्र तक पहुंचने के लिए IReadOnlySessionState का उपयोग किया है। सब कुछ ठीक काम कर रहा है।
जेनेरिक http हैंडलर

लेकिन जब सत्र समाप्त हो जाता है तो मेरा हैंडलर कुछ एचटीएमएल लौटा रहा है क्योंकि यह डिफ़ॉल्ट पृष्ठ पर रीडायरेक्ट करता है और डिफ़ॉल्ट पृष्ठ के एचटीएमएल को प्रतिक्रिया में वापस भेज दिया जाता है।

इस मुद्दे को दूर करने के लिए।
मैं हैंडलर में सत्र चर जाँच की है और अगर ऐसा है अशक्त मैं

context.Response.Write("logout") 

लिखा है और मैं jQuery ajax मौसम में जाँच यह लॉगआउट या कुछ और है।

$.ajax({ 
      url: "myhandler.ashx", 
      contentType: "application/json; charset=utf-8", 
      success: function (data) { checklogout(data); $("#loading").hide(); }, 
      error: function() { $("#loading").hide(); }, 
      async: false 
     }); 


यह है लॉगआउट तो मैं स्थान प्रवेश पृष्ठ पर रीडायरेक्ट करने के लिए उपयोग किया है।
मैं उपयोगकर्ता को प्रमाणीकृत करने के लिए form-authentication का उपयोग कर रहा हूं।

jquery-ajax कॉल का उपयोग कर लॉगिन पेज पर जांच और पुनर्निर्देशित करने के लिए कोई बेहतर तरीका है।

+1

यह शायद बेहतर होगा एक उचित [HTTP स्थिति कोड] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html) वापस करने के लिए, जैसे आपके हैंडलर से * 401 अनधिकृत * (और शायद एक एकल बेस हैंडलर बनाएं ताकि आप तर्क दोहराते नहीं हैं)। आप अपने केंद्रीय AJAX विकल्पों ('$ .ajaxsetup') में इस मान को देख सकते हैं, इसलिए जांचने के लिए कोड केवल एक ही स्थान पर जाना होगा। क्या आप जो चाहते हैं उसकी तर्ज पर है? –

उत्तर

2

आपके पास अपने हैंडलर निर्देशिका में हैं जो स्वचालित रूप से asp.net के प्रमाणीकरण द्वारा नियंत्रित होते हैं।

मुझे क्या करना चाहिए यह है कि वेब.कॉन्फिग पर सेटअप द्वारा एएसपीनेट प्रमाणीकरण द्वारा स्वचालित रूप से नियंत्रण न करें ताकि हैंडलर को कॉल ईथर में लॉग इन किया गया हो और उपयोगकर्ता हैंडलर के अंदर लॉग इन कर सकें उस के लिए जांच करें, अगर उस हैंडलर को कॉल करने वाला उपयोगकर्ता सत्र और प्रमाणीकरण करता है।

तो ऐसा होता है कि उपयोगकर्ता, कि हैंडलर मैं अपने ajax कॉल करने के लिए एक सरल ध्वज लौट पढ़ा तो समझते हैं और पुन: निर्देशन बनाने के लिए प्रमाणीकरण नहीं था में

, जैसे के रूप में:

$.ajax({ 
    url: "myhandler.ashx", 
    contentType: "application/json; charset=utf-8", 
    success: function (data) 
    { 
     if(data.redirectToLogin == true) 
     { 
      window.location = "/login.aspx" 
     } 
     else 
     { 
      // do the rest job 
     } 
    }, 
    error: function() 
    { 
     $("#loading").hide(); 
    } 
}); 
+0

अच्छा विचार माना जाता है। लेकिन जब 'डेटा' में संपत्ति 'रीडायरेक्ट टोलॉगिन' नहीं है तो यह 'जावा-स्क्रिप्ट' अपवाद देगा या नहीं। अगर मैं अपने वेबकॉन्फिग फ़ाइल में '' का उपयोग करता हूं तो भी कोई सुरक्षा खतरा होगा हालांकि मैं सभी हैंडलर के अंदर उपयोगकर्ता सत्र की जांच करूंगा। –

+1

@ कृशेखर आप आसानी से "को" या अन्य ध्वज जैसे स्ट्रिंग को वापस कर सकते हैं, यह हल करना आसान है। – Aristos