समस्या का कारण एक सत्र कुकी रोटेशन जब एक AJAX कॉल किया जाता है है, उचित ठीक CodeIgniter 3
में शामिल किया गया था आप चार विकल्प हैं:
कोप: मैं वास्तव में इसका कारण जानने के बिना पहले इस समस्या का सामना करना पड़ा। संक्षेप में, मैंने प्रत्येक XMLHttpRequest का वादा सहेजा, यदि HTTP स्थिति कोड 401 का सामना किया गया था, तो क्लाइंट साइड एप्लिकेशन किसी पॉपअप के रूप में प्रमाण-पत्रों का अनुरोध करेगा, और फिर AJAX वादे को पुनः प्रयास करेगा। jQuery के साथ
क्लाइंट साइड, सिर्फ इस ajaxError हैंडलर जोड़ने:
$(document).ajaxError(function (e, xhr, settings, exception) {
if (xhr.status == 401)
{
// open your popup
$('#login-popup').modal('open');
// attach the xhr object to the listener
$(document).bind("retry-xhr", {
xhro: xhr
},
function(event) {
// retry the xhr when fired
$.ajax(event.data.xhro);
});
}
});
और जब आप वापस में लॉग इन कर रहे हैं, सिर्फ इस फोन पुनः अनुरोध करने के लिए:, केवल
$(document).trigger('retry-xhr');
सर्वर साइड आप यदि आपके कन्स्ट्रक्टर
if (!$this->session->userdata('logged_in') && $this->input->is_ajax_request())
{
$this->output->set_status_header('401');
exit;
}
यह उपयोगी था क्योंकि कुछ उपयोगकर्ता लीए उनकी वेब ऐप विंडो रात भर खुली है और सत्र टाइमआउट किक कर देगा। फिर उपयोगकर्ता मुझे किसी भी AJAX फ़ंक्शन को करने में सक्षम नहीं होने के बारे में कॉल करेंगे, और मुझे उन्हें F5
ps दबाएं। यदि कोणीय पर, मैं HTTP प्रमाणीकरण इंटरसेप्टर मॉड्यूल सफलतापूर्वक
हैक का इस्तेमाल किया है: यह पोस्ट देखें, उनके समाधान, ci_session तालिका में एक और क्षेत्र बना सकते हैं और दोनों कुकीज़ के लिए जाँच करने के लिए है, इसलिए आपका सत्र अभी भी मान्य रहेगा घूर्णन के बाद।
यह भी विस्तार से बताते हैं कि इस गड़बड़
खड़ी कर रहा है http://www.hiretheworld.com/blog/tech-blog/codeigniter-session-race-conditions
अपग्रेड: प्रारंभ अगले संस्करण में यह पहले से तय हो गई है का उपयोग करते हुए:
https://github.com/EllisLab/CodeIgniter/tree/release/3.0
पैच सिस्टम में लाइन 346 बदलें/पुस्तकालयों/सत्र।php (समारोह sess_update())
if (($this->userdata['last_activity'] + $this->sess_time_to_update) >= $this->now)
के साथ:
if (($this->userdata['last_activity'] + $this->sess_time_to_update) >= $this->now || $this->CI->input->is_ajax_request())
आप किसी भी ajax अनुरोध कहीं भी कर रहे हैं? सीआई सत्र सत्र और दौड़ की स्थितियों के साथ समस्याएं हैं जिन्हें अभी तक पूरी तरह से संबोधित नहीं किया गया है – jmadsen
मैं AJAX अनुरोधों का उपयोग कर रहा हूं - मुखपृष्ठ पर AJAX अनुरोध है जो मूल रूप से डेटाबेस तालिका खोजने के लिए एक GET अनुरोध करता है। – Zabs