2009-06-17 17 views
13

मुझे यकीन है कि आप सभी मतदान प्रणाली कि AJAX का उपयोग से परिचित हो रहा हूँ (उम ... देखो सही वहाँ पर < ----)कैसे AJAX में सत्र समय समाप्ति के साथ सौदा करने का अनुरोध करता है

मैं कुछ है समान और जब आप वोट या डाउन करते हैं तो यह वोट.एफ़पी से नए मान का अनुरोध करने के लिए AJAX का उपयोग करता है। समस्या यह है कि मैं उपयोगकर्ता को प्राप्त करने के लिए एक सत्र का उपयोग कर रहा हूं ताकि एक व्यक्ति केवल एक बार मतदान कर सके। क्या होता है यदि वे एक घंटे के लिए पृष्ठ पर बैठते हैं और फिर मतदान करते हैं तो सत्र अब और नहीं है? इस स्थिति को संभालने का एक अच्छा तरीका क्या होगा? क्या मुझे अपने पृष्ठ को लॉगिन स्क्रीन पर रीडायरेक्ट करना चाहिए? यदि हां, तो मैं इसे वोट.एफ़पी पृष्ठ से कैसे कर सकता हूं जिसे AJAX अनुरोध द्वारा संदर्भित किया जा रहा है? क्या मैं इस स्थिति को संभालने का एक अच्छा तरीका देख रहा हूं? कोई भी सलाह सहायक होगी।

उत्तर

11

401 की http स्थिति और एक JSON ऑब्जेक्ट को कारण बताते हुए वापस लौटने पर विचार करें। यदि आप jQuery का उपयोग कर रहे हैं, तो यह आपको error() कॉलबैक पर छोड़ देगा, जिसे आप अपनी ऑब्जेक्ट को पार्स कर सकते हैं।

$.ajax({ 
    data: {}, 
    dataType: 'html', 
    success: function(data) { 
    // do whatever here 
    }, 
    type: 'POST', 
    url: 'myserver.com', 
    error: function(XMLHttpRequest, textStatus, errorThrown) { 
    // XMLHttpRequest.responseText has your json string 
    // XMLHttpRequest.status has the 401 status code 
    if (XMLHttpRequest.status === 401) { 
     location.href = 'login.php'; 
    } 
    } 
}); 

मैं अब PHP से परिचित नहीं हूं, लेकिन यह किसी भी पर्यावरण के लिए काम करना चाहिए। आप को किसी भी स्वचालित लॉगिन फॉर्म पुनर्निर्देशन को दबाने के लिए है। एएसपीएनटी एमवीसी में फ्रेमवर्क 401 देखेंगे और 200 9 की स्थिति के साथ डिफ़ॉल्ट लॉगिन फॉर्म को वापस धक्का देगा।

+1

मैं अगर तुम मुझे बताओ कैसे ठीक वापस जाने के लिए एक 401 –

+0

ASP.NET में आप सिर्फ Response.StatusCode = 401 सेट कर सकते हैं आप $ 0 दूँगा; हालांकि आपको PHP में कैसे बताया जा सकता है ... शायद एक दिन कोई ऐसी वेबसाइट तैयार करेगा जो आपको प्रोग्रामिंग प्रश्न पूछने देगा ;- – swilliams

+0

मैंने वास्तव में यह कोशिश की और यह एक एचटीपी प्रमाणीकरण बॉक्स को पॉप अप करने के लिए समाप्त हो गया आपका उपयोगकर्ता नाम और पासवर्ड। यह वह कार्यक्षमता नहीं है जिसे मैं ढूंढ रहा हूं। –

0

आप जावास्क्रिप्ट कोड को बनाते हैं जो अजाक्स को विशेष परिणाम स्वीकार करने का अनुरोध करता है (कहें, -1 जहां >=0 संख्या आमतौर पर वोटों की गिनती होगी), "माफ करना बब, आपका समय समाप्त हो गया है "और फिर से लॉगिन पृष्ठ पर रीडायरेक्ट करें (जो एक वैकल्पिक पैरामीटर के रूप में ले सकता है जो उपयोगकर्ता द्वारा बताए गए संदेश को & सी) बताता है।

1

आपको केवल सत्र में उपयोगकर्ता पहचान के लिए एक लिंक स्टोर करना चाहिए। उपयोगकर्ता को x के रूप में पहचानने के लिए सत्रों का उपयोग करें और फिर डेटाबेस से उपयोगकर्ता x की जानकारी प्राप्त करें।

यदि आपकी समस्या उपयोगकर्ता सत्र समय के साथ है तो आपको पुनर्विचार करना चाहिए कि आप अपने सत्रों का उपयोग कैसे कर रहे हैं। शायद ब्राउज़र को बंद होने तक उन्हें आखिरी बना दें? यदि आप वास्तव में उन्हें एक अवधि बनाना चाहते हैं, तो शायद सत्र को जीवंत रखने के लिए सर्वर को अंतराल में पिंग करें।

अपनी PHP स्क्रिप्ट में निर्णय लें कि उपयोगकर्ता वोट देने में सक्षम होना चाहिए या नहीं। यदि सत्र सेट नहीं है, या यदि वे पहले से ही मतदान कर चुके हैं, तो एक संदेश लौटाएं जिसे आप क्लाइंट साइड पर पहचान सकते हैं। यदि वे पहले ही मतदान कर चुके हैं तो शायद JSON ऑब्जेक्ट में "voted":"true" लौटाएं। जेएस का प्रयोग इस ऑब्जेक्ट को पार्स करने के लिए करें और समझें कि इसका क्या मतलब है, उचित कार्रवाई करना। यदि सत्र सेट नहीं है, तो शायद "session_set":"false" लौटाएं, और फिर window.location = "login.php" आदि के साथ जावास्क्रिप्ट रीडायरेक्ट करें

केवल गिनती वोट की सफल वापसी पर उपयोगकर्ता के लिए काउंटर बढ़ाएं।

+0

fyi, मैं केवल सत्र में उपयोगकर्ता आईडी संग्रहीत कर रहा हूं –

+0

बस यह सुनिश्चित कर रहा था, यह बिल्कुल स्पष्ट नहीं था: x –

0

आप एक जावास्क्रिप्ट समारोह है कि सर्वर की तरह

setTimeout("Ping()", 60000); 

कुछ के माध्यम से हर 10 मिनट पिंग सकता है आप प्रवेश पृष्ठ पर उपयोगकर्ता नेविगेट करने के लिए अगर वे एक दोषपूर्ण सत्र के साथ कनेक्ट तो मैं पहली बार होगा चाहते हैं बना सकते हैं सत्र को सत्यापित करने और यह विफल रहता है भेजने के एक

header("Location: ..."); 

http://ca2.php.net/manual/en/function.header.php

0

एक उपयोगकर्ता के दृष्टिकोण से, सबसे अच्छा समाधान है एक संदेश और लॉगिन फॉर्म पॉप अप करने के लिए, कुछ ऐसा कहकर "आप लॉग इन नहीं हैं या आपका सत्र समाप्त हो गया है"। Digg यह बहुत अच्छा करता है।

वास्तविक AJAX कार्यान्वयन के लिए, swilliams '401 सुझाव ठोस है। वैकल्पिक रूप से, आप आसानी से विफलता पर एक विशिष्ट स्ट्रिंग वापस कर सकते हैं।

1

यह एक पुराना धागा है, लेकिन मैं अपना समाधान साझा करना चाहता था जो वास्तव में अच्छी तरह से काम कर रहा है।

मेरे ढांचे में सिस्टम किसी भी पृष्ठ तक पहुंचने का प्रयास करते समय उपयोगकर्ता को लॉगिन फॉर्म पर रीडायरेक्ट करता है और सत्र का समय समाप्त हो गया है या मान्य नहीं है। मैं लॉगिन के शीर्ष पर जोड़ा निम्नलिखित एचटीएमएल टिप्पणी फार्म:

<!--LOGINFORM--> 

मैं जो हर अनुरोध पर इस स्ट्रिंग के लिए जाँच करता है, और अगर यह नहीं है यह एक संवाद से पता चलता jQuery के $ .ajax समारोह के लिए एक आवरण बनाया पॉपअप कह रहा है कि उनके सत्र का समय समाप्त हो गया है।

तुम बस को फोन करके इस का उपयोग कर सकते हैं:

ajax.get('http://someurl.com', function(data){ 
    //Do stuff 
}); 

आशा है कि यह किसी को मदद मिलती है।

var ajax = { 
    check_login : function(resp){ 
     if (resp.substring(0, 16) === "<!--LOGINFORM-->"){ 
      // Show a popup or redirect them to login page! 
      return true; 
     } 
     return false; 
    }, 
    get : function(url, success){  
     if (typeof data =='undefined'){ 
      data = null; 
     } 

     $.ajax({ 
      url: url, 
      type : 'GET', 
      success : function(resp){ 
       if (!ajax.check_login(resp)) { 
        success(resp); 
       } 
      }, 
     }); 
    } 
}; 
संबंधित मुद्दे