2014-04-30 10 views
5

का उपयोग कर स्वचालित सत्र कुकी रीफ्रेशिंग को कार्यान्वित करने के लिए कैसे करें IOS एप्लिकेशन (AFNetworking 2, AFURLSessionManager का उपयोग करके) विकसित कर रहा हूं, जहां मुझे एक एपीआई के साथ बातचीत करना है जिसे मैं नियंत्रित नहीं करता (जो सिम्फनी PHP का उपयोग कर रहा है फ्रेमवर्क अगर इससे कोई फर्क पड़ता है)।आईओएस ऐप - AFNetworking 2

समस्या यह है: उपयोगकर्ता का खाता है। ऐप के पहले लॉन्च पर, उपयोगकर्ता को फॉर्म-आधारित लॉगिन स्क्रीन मिलती है। वे लॉग इन करते हैं, फिर सत्र कुकी प्राप्त करते हैं। कुकी 30 मिनट में समाप्त हो जाती है। यह क्लाइंट द्वारा किए गए हर कॉल पर खुद को नवीनीकृत कर देगा। हालांकि, अगर ऐप को पुनरारंभ किया जाता है तो कुकी हटा दी जाती है और यदि ऐप 30 मिनट से अधिक के लिए निष्क्रिय है, तो कुकी अमान्य हो जाएगी।

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

मेरा समाधान अब तक है: अनुरोध करें। अगर मुझे अनधिकृत त्रुटि प्रतिक्रिया मिलती है, तो एक पुनः प्रयास कतार (जिसे मैं स्वयं प्रबंधित करता हूं) में अनुरोध जोड़ें, लॉगिन ध्वज सेट करें, और लॉगिन अनुरोध करें। प्रगति पर लॉगिन होने पर यह देखने के लिए पहले कोई भी नया अनुरोध लॉगिन फ्लैग की जांच करता है। यदि ऐसा है, तो वे सीधे पुनः प्रयास कतार में जाते हैं। जब लॉगिन अनुरोध पूरा हो जाता है, तो मैं पुनः प्रयास कतार के माध्यम से जाता हूं और सभी कतारबद्ध अनुरोध करता हूं।

अभी तक, यह बहुत अच्छी तरह से काम कर रहा प्रतीत होता है। लेकिन, मुझे यह घबराहट महसूस हो रही है कि एक बेहतर तरीका है। क्या इस तरह की स्थिति से निपटने के लिए कोई अंतर्निहित तंत्र नहीं है? यह उपयोगकर्ता प्रमाणीकरण को संभालने के लिए एक आम तरीका प्रतीत होता है, लेकिन मुझे AFNetworking में इससे निपटने के तरीके के बारे में कोई दस्तावेज नहीं मिल रहा है। वे बेसिक और डाइजेस्ट ऑथ को कवर करते हैं लेकिन इस फॉर्म-आधारित सत्र कुकी ऑथ के बारे में कुछ भी नहीं। यह पहली बार है जब मुझे इससे निपटना होगा और मैं विश्वास नहीं कर सकता कि किसी और के पास यह वही समस्या नहीं है। कोई विचार?

+0

एक ही समस्या/प्रश्न की तरह की कोशिश, मैं AFNetworking में "दोबारा लॉगिन" ब्लॉक का एक प्रकार है करने के लिए के लिए अच्छा लगेगा संचालन प्रबंधक या कुछ। – StijnSpijker

+0

यह उपयोगी हो सकता है - http://stackoverflow.com/a/24778719/900024 –

+0

मैं इसे जांचूंगा प्रैटिक यह प्रतीत होता है – d370urn3ur

उत्तर

0

उपयोगकर्ता द्वारा लॉग इन करने के बाद आपकी सत्र आईडी स्वचालित रूप से भेजी जानी चाहिए, जब तक कि अगले अनुरोध को भेजने से पहले कुकी समाप्त नहीं हो जाती है। NSURLConnection, जो AFNetworking का उपयोग करता है, इस का ख्याल रखता है को बचाने के लिए एक रास्ता है और लोड कुकीज़ यहाँ इस

- (void)saveCookies{ 

    NSData *savecookiesData = [NSKeyedArchiver archivedDataWithRootObject: [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]]; 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject: savecookiesData forKey: @"sessionCookies"]; 
    [defaults synchronize]; 

} 

- (void)loadCookies{ 

    NSArray *loadcookiesarray = [NSKeyedUnarchiver unarchiveObjectWithData: [[NSUserDefaults standardUserDefaults] objectForKey: @"sessionCookies"]]; 
    NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 

    for (NSHTTPCookie *cookies in loadcookiesarray){ 
     [cookieStorage setCookie: cookies]; 
    } 

} 
+0

क्या आपने अपना मुद्दा हल किया है – Sport

+0

यह मेरी समस्या का 50% हल करता है, ऐप लॉन्च में कुकीज़ को जारी रखता है। हालांकि, सत्र के 30 मिनट के बाद सत्र समाप्त हो जाता है। तो यदि उपयोगकर्ता ऐप की जांच करता है, पत्तियां, एक घंटे में वापस आती हैं, तो मुझे कोई फर्क नहीं पड़ता कि इससे कोई फर्क नहीं पड़ता। यह अक्सर होता है। मैं जो खोज रहा हूं, और दोनों समस्याओं को एक साथ हल करने के लिए, कुछ प्रकार का कॉलबैक है जो मुझे 401 प्राप्त करता है और अनुरोध कतार को तब तक निलंबित करता है जब तक कि मैं पुनः लॉगिन कार्रवाई पूरी नहीं करता। प्रतििक ने AFNetworking-AutoRetry का सुझाव दिया और यह कम से कम जटिल समाधान हो सकता है। – d370urn3ur