2011-05-12 29 views
5

Uygulamam (çoğu gibi) birçok uzaktan hizmetten yararlanacak ... böylece bir kullanıcı kendilerini doğruladığı zaman, kullanıcı adlarını ve parolalarını (veya bir çeşit bayrağını) kimlik doğrulaması yapmamaları için kaydetmeliyim tüm uygulama boyunca.iPhone: Kullanıcı verilerini plist, SQLite veya çerez olarak kaydetme?

Bu kullanıcı verilerini depolamak için en iyi/hızlı/kolay yer neresi?

cevap

11

Hala NSUserDefaults ile kullanıcı adı ve sunucu URL'sini saklayabilir, ancak bir parola depolamak eğer Anahtarlık hizmetler iyi bir fikirdir. C-Tabanlı güvenlik çerçevesinin bir parçasıdır ve bir Objective-C API'si vermek için SFHFKeychainUtils büyük bir sarmalayıcı sınıfı vardır.

kaydetmek için:

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

OSX ve iOS arasında ortak bir kitaplık paylaşan bir projem var. Giriş yönetimim çoğunlukla paylaşılan kütüphanede yer alıyor. Başlık dosyasından #import dosyasını kaldırdım ve bu hem OSX hem de iOS için iyi bir derleme yapıyor. ** Henüz OSX istemcisini test etmedim. Yeniden kullanılabilir kod için +1. –

8

NSUserDefaults

böyle

Kaydet:

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

böyle getir:

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

Ve bu tam olarak bu amaç için tasarlanmış otomatik bir uygulama nesnesidir:

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] 

geri yüklemek için? – dcolumbus

+0

Evet, NSUserDefaults, kullanıcı ile ilgili bir kerelik değerleri depolamak içindir. – Rayfleck

+0

Güzel! Çok teşekkürler! – dcolumbus

5

güvensiz dosyasında güvenli veri depolama (kullanıcı varsayılan) genellikle iyi bir fikir değildir. Hassas giriş bilgilerini ve benzerlerini şifreleyen Anahtarlık Hizmetlerine bakın.

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

+0

Sadece bunu Yardım'da okudum ve ihtiyacım olana benziyor! Bir şifre ile birlikte, anahtarlık içinde başka türlü bilgileri de saklayabilir miyim? – dcolumbus

+0

Çok fazla kullanmadım, bu yüzden kesin bir cevap veremem, ancak eminim ki bazı kullanıcı bilgilerini kimlik doğrulama verileriyle birlikte saklayabilirsiniz. Bir örnek arıyorsanız, [buradaki belgelerin örnek projesini inceleyin] (http://developer.apple.com/library/ios/#samplecode/GenericKeychain/Introduction/Intro.html). –