2009-11-17 12 views
93

इस समय मैं जिस एप्लिकेशन पर काम कर रहा हूं वह सत्र टाइमआउट मान है। यदि उपयोगकर्ता ने इस मान से अधिक समय तक बातचीत नहीं की है, तो वे अगले पृष्ठ को लोड करने का प्रयास करेंगे, उन्हें लॉग इन करने के लिए कहा जाएगा।HTTP 401 - एक उपयुक्त WWW- प्रमाणीकरण हेडर मान क्या है?

सभी अनुरोध किए गए सभी अनुरोध इस तंत्र के माध्यम से रूट किए गए हैं, जिसमें AJAX कॉल शामिल हैं। मूल रूप से हम लॉगिन पेज के साथ 200 हेडर भेज रहे थे, जो AJAX के साथ कुछ समस्याएं पेश करता है क्योंकि 200 प्रतिक्रिया भेजी जाती है, तो कोड चलाया जाता है, और इन आरपीसी कॉल से वापस भेजा गया अधिकांश डेटा JSON या कच्ची जावास्क्रिप्ट है जिसका मूल्यांकन किया जाता है (नहीं पूछो: |)।

मैं सुझाव दिया है कि एक 401 बेहतर है, के बाद से हमारे JSON पार्सर एक HTML प्रवेश पृष्ठ का उपभोग करने का प्रयास नहीं करेंगे .. :)

जब reading the spec, हालांकि, मैंने देखा है कि WWW-Authenticate क्षेत्र चाहिए भी भेजा जा सकता है।

इस क्षेत्र के लिए एक अच्छा मूल्य क्या है? Application Login पर्याप्त होगा?

उत्तर

58

जब बुनियादी HTTP प्रमाणीकरण का संकेत हम की तरह कुछ वापस जाएँ। इस मामले में दायरे सिर्फ ब्राउज़र को एक शाब्दिक प्रदान करता है जिसे उपयोगकर्ता आईडी और पासवर्ड के लिए संकेत देते समय उपयोगकर्ता को प्रदर्शित किया जा सकता है।

आप स्पष्ट रूप से बेसिक का उपयोग नहीं कर रहे हैं, हालांकि मूल ऑथ का उपयोग होने पर सत्र समाप्ति होने की कोई बात नहीं है। मुझे लगता है कि आप प्रपत्र आधारित प्रमाणीकरण के कुछ रूपों का उपयोग कर रहे हैं।

स्मरण से, विंडोज चैलेंज प्रतिक्रिया एक अलग योजना और विभिन्न तर्कों का उपयोग करता है।

चाल यह है कि यह निर्धारित करने के लिए ब्राउज़र पर निर्भर करता है कि यह कौन सी योजनाओं का समर्थन करता है और यह उनका जवाब कैसे देता है।

मेरा आंत महसूस करता है कि आप फॉर्म आधारित प्रमाणीकरण का उपयोग कर रहे हैं 200 + रिलागिन पेज के साथ रहना है, लेकिन कस्टम हेडर जोड़ें जो ब्राउज़र अनदेखा करेगा लेकिन आपका AJAX पहचान सकता है।

वास्तव में एक अच्छा उपयोगकर्ता + AJAX अनुभव के लिए, स्क्रिप्ट प्राप्त करने के लिए स्क्रिप्ट प्राप्त करें जो सत्र समाप्त हो गया है, पॉपअप के माध्यम से एक relogin अनुरोध को आग लगाना, और सफलता पर, मूल AJAX अनुरोध को पुनः सबमिट करें और आगे बढ़ें सामान्य रूप में।

धोखे से बचें जो सत्र को जीवित रखने के लिए हर 5 मिनट में साइट पर हिट करने के लिए स्क्रिप्ट प्राप्त करता है जो सत्र समाप्ति के बिंदु को हरा देता है।

अन्य विकल्प AJAX अनुरोध को जला दिया गया है लेकिन यह एक खराब उपयोगकर्ता अनुभव है।

+1

धन्यवाद संभोग, मैं अब एक 403 का उपयोग कर रहा है, क्योंकि यह बजाय एक रीडायरेक्ट नहीं है और यह शाब्दिक रूप से मूल पृष्ठ के स्थान पर लॉगिन फॉर्म शामिल है। यह डब्ल्यू 3 विनिर्देश से भी बेहतर मेल खाता है। हालांकि जानकारी के लिए धन्यवाद। –

+2

इस बारे में उत्तर दें कि आप अभी भी HTTP 401 का उपयोग कैसे कर सकते हैं: http://stackoverflow.com/questions/928874/how-do-i-keep-firefox-from-prompting-for-username-password-with-http-basic -एथ/1 9102200 # 1 9102200 – lanoxx

+0

हां, मुझे लगता है कि डब्ल्यूडब्ल्यूडब्लू-प्रमाणीकरण हेडर में कुछ भी डालें, मुझे लगता है। एक समान नस में एक और जवाब http://stackoverflow.com/a/1088127/689161 है या बस spec का उल्लंघन करें और शीर्षलेख भेजने से परेशान न करें (कम से कम कुछ साइटें यह करें); 401 अभी भी 403 से अधिक उपयुक्त है। – gengkev

6

नहीं, आपको उपयोग करने के लिए प्रमाणीकरण विधि (आमतौर पर "मूल") और प्रमाणीकरण क्षेत्र निर्दिष्ट करना होगा। उदाहरण अनुरोध और प्रतिक्रिया के लिए http://en.wikipedia.org/wiki/Basic_access_authentication देखें।

आप RFC 2617 - HTTP Authentication: Basic and Digest Access Authentication पढ़ना भी चाहेंगे।

WWW-Authenticate: Basic realm="myRealm" 

Basic जबकि योजना है और शेष के बहुत ज्यादा है कि इस योजना पर निर्भर है:

-3

जब उपयोगकर्ता सत्र का समय समाप्त होता है, तो मैं एक HTTP 204 स्थिति कोड वापस भेजता हूं। ध्यान दें कि HTTP 204 स्थिति में कोई सामग्री नहीं है।

xhr.send(null); 
if (xhr.status == 204) 
    Reload(); 
else 
    dropdown.innerHTML = xhr.responseText; 

यहाँ फिर से लोड करें() फ़ंक्शन है: क्लाइंट-साइड पर मैं यह कर

function Reload() { 
    var oForm = document.createElement("form"); 
    document.body.appendChild(oForm); 
    oForm.submit(); 
    } 
+2

आप HTTP 204 का उपयोग कैसे कर रहे हैं? https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/204 –

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