2011-05-12 13 views
5

मेरा ऐप (अधिकतर की तरह) कई रिमोट सेवाओं का लाभ उठाने जा रहा है ... इसलिए जब कोई उपयोगकर्ता स्वयं को प्रमाणित करता है, तो मुझे अपना उपयोगकर्ता नाम और पासवर्ड (या किसी प्रकार का ध्वज) स्टोर करना होगा ताकि उन्हें प्रमाणित करने की आवश्यकता न हो पूरे ऐप पर।आईफोन: प्लेस्ट, SQLite या कुकी में उपयोगकर्ता डेटा सहेजें?

इस उपयोगकर्ता डेटा को स्टोर करने के लिए सबसे अच्छा/तेज़/आसान स्थान कहां है?

उत्तर

11

तुम अब भी उपयोगकर्ता नाम और NSUserDefaults साथ सर्वर URL स्टोर कर सकते हैं, लेकिन कीचेन सेवाओं के लिए सबसे अच्छा विचार है आप एक पासवर्ड के भंडारण कर रहे हैं। यह सी-आधारित सुरक्षा ढांचे का हिस्सा है, और एक उद्देश्य-सी एपीआई देने के लिए, एक महान रैपर वर्ग SFHFKeychainUtils है।

सहेजने के लिए:

NSString *username = @"myname"; 
NSString *password = @"mypassword"; 
NSURL *serverURL = [NSURL URLWithString:@"http://www.google.com"]; 

[SFHFKeychainUtils storeUsername:username andPassword:password forServiceName:[serverURL absoluteString] updateExisting:YES error:&error] 

पुनर्स्थापित करने के लिए:

NSString *passwordFromKeychain = [SFHFKeychainUtils getPasswordForUsername:username andServiceName:[serverURL absoluteString] error:&error]; 
+0

मेरे पास एक प्रोजेक्ट है जो ओएसएक्स और आईओएस के बीच एक सामान्य पुस्तकालय साझा करता है। मेरा लॉगिन प्रबंधन ज्यादातर साझा लाइब्रेरी में निहित है। मैंने हेडर फ़ाइल से #import हटा दिया, और यह ओएसएक्स और आईओएस दोनों के लिए ठीक संकलित करता है। ** मैंने अभी तक ओएसएक्स क्लाइंट का परीक्षण नहीं किया है। पुन: प्रयोज्य कोड के लिए +1। –

8

NSUserDefaults

इस तरह सहेजें:

[[NSUserDefaults standardUserDefaults] setObject:username forKey:@"username"]; 
[[NSUserDefaults standardUserDefaults] setObject:password forKey:@"password"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

इस तरह लायें:

NSString *username = [[NSUserDefaults standardUserDefaults] stringForKey:@"username"]; 
    NSString *password = [[NSUserDefaults standardUserDefaults] stringForKey:@"password"]; 
+0

और यह एक स्वत: आवेदन उद्देश्य यह है कि इस सटीक उद्देश्य के लिए डिजाइन किया गया था है? – dcolumbus

+0

हां, NSUserDefaults एक-ऑफ उपयोगकर्ता से संबंधित मानों को संग्रहीत करने के लिए हैं। – Rayfleck

+0

अच्छा! आपका बहुत बहुत धन्यवाद! – dcolumbus

5

एक असुरक्षित फ़ाइल में सुरक्षित डेटा भंडारण (उपयोगकर्ता चूक) आम तौर पर एक अच्छा विचार नहीं है। कीचेन सेवाओं में देखें, जो संवेदनशील लॉगिन जानकारी और ऐसे को एन्क्रिप्ट करता है।

http://developer.apple.com/library/mac/#documentation/Security/Conceptual/keychainServConcepts/iPhoneTasks/iPhoneTasks.html

+0

मैं बस सहायता में इस पर पढ़ता हूं और ऐसा लगता है कि मुझे क्या चाहिए! मुझे लगता है कि एक पासवर्ड के साथ, आप कीचेन के भीतर अन्य प्रकार की जानकारी भी स्टोर कर सकते हैं? – dcolumbus

+0

मैंने इसे बहुत अधिक उपयोग नहीं किया है, इसलिए मैं एक निश्चित उत्तर नहीं दे सकता, लेकिन मुझे पूरा यकीन है कि आप कुछ उपयोगकर्ता जानकारी प्रमाणीकरण डेटा के साथ स्टोर कर सकते हैं। यदि आप एक उदाहरण की तलाश में हैं, [यहां प्रलेखन से नमूना प्रोजेक्ट देखें] (http://developer.apple.com/library/ios/#samplecode/GenericKeychain/Introduction/Intro.html)। –

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