2012-01-27 16 views
5

का उपयोग कर आरओआर में सत्र टाइमआउट संदेश मेरे पास एक आवेदन है जो 30 मिनट के लिए तैयार और सत्र समय समाप्ति के साथ सुरक्षित है। विवेक के साथ सभी सामान्य नेविगेशन के लिए अच्छी तरह से काम कर रहे हैं, यदि उपयोगकर्ता समय पर लिंक पर क्लिक करता है तो वे "आपके सत्र की समयसीमा समाप्त होने के बाद, कृपया जारी रखने के लिए फिर से साइन इन करें" कहकर एक संदेश के साथ लॉगिन स्क्रीन पर रीडायरेक्ट हो जाते हैं।डेविस

हालांकि मेरे पास कई जगहों पर AJAX है। यदि सत्र का समय समाप्त हो जाता है और उपयोगकर्ता AJAX ऑपरेशन करता है तो मैं ऊपर जैसा ही व्यवहार चाहता हूं बल्कि पृष्ठभूमि में 401 त्रुटि के साथ चुपचाप विफल रहता हूं।

अब तक मैं 401S पकड़ने और फिर से लोड करने के लिए प्रत्येक पृष्ठ पर इस jQuery कोड है:

$(document).ajaxError(function(e, error) { 
    switch(error.status) { 

    case 401: { 
     // unauthorised (possible timeout) 
     location.reload(); 
     break; 
    } 

यह काफी अच्छी तरह से काम करता है, लेकिन एक कष्टप्रद मुद्दा है:

क्योंकि ajax अनुरोध हिट पहली वसीयत , जब मेरा एप्लिकेशन पेज को पुनः लोड करता है तो मुझे लॉगिन पेज पर निर्देशित किया जाता है, लेकिन मुझे टाइमआउट संदेश नहीं दिखाई देता है, मुझे अनधिकृत दिखाई देता है "आपको साइन इन करने या जारी रखने से पहले साइन अप करने की आवश्यकता है।" संदेश।

क्या यह सुनिश्चित करने का कोई तरीका है कि दूसरे अनुरोध पर अभी भी टाइमआउट संदेश दिखाया गया है?

उत्तर

2

मुझे लगता है कि आपको यह संदेश मैन्युअल रूप से दिखाने की ज़रूरत है, उदाहरण के लिए किसी विशिष्ट यूआरएल पर रीडायरेक्ट करके या कुछ क्वेरी पैरामीटर सेट करना।

समस्या यह है कि आपके 401 अनुरोध के बाद आपको एक नया सत्र मिला और जब आप ब्राउज़र को फिर से लोड करते हैं, तो अगला अनुरोध आपके एप्लिकेशन को खाली सत्र के साथ दबाएगा। यही कारण है कि आपको अनधिकृत संदेश मिलता है।

1

टाइमआउट संदेश "आपका सत्र समाप्त हो जारी रखने के लिए फिर से प्रवेश करें।", xhr.responseText में उपलब्ध है तो एक दृष्टिकोण सिर्फ प्रदर्शित करने के लिए है कि होगा:

$(document).ajaxError(function(e, error) { 
    switch(error.status) { 

    case 401: { 
     // unauthorised (possible timeout) 
     location.reload(); 
     alert(xhr.responseText); 
     break; 
    } 

मेरे लिए यह बेहतर प्रवाह के लिए लगता है: क्लिक करें अजाक्स फ़ॉर्म पर अपडेट करें, सत्र को समाप्त करने के बारे में एक चेतावनी प्राप्त करें, फिर साइनइन पेज पर फ्लैश में "आपको साइन इन करने या साइन अप करने से पहले साइन अप करने की आवश्यकता है" देखें।