2011-05-12 107 views
5

我的應用程序(像大多數)將會利用很多遠程服務......所以當用戶驗證自己的身份時,我需要存儲他們的用戶名和密碼(或某種標誌),以便他們不必驗證身份遍佈應用程序。iPhone:將用戶數據保存在plist,SQLite或cookie中?

存儲此用戶數據的最佳/最快/最容易的地方在哪裏?

回答

11

您仍然可以存儲用戶名和服務器URL NSUserDefaults的有,但鑰匙扣服務是最好的想法,如果你存儲密碼。它是基於C語言的安全框架的一部分,並且有一個很好的包裝類SFHFKeychainUtils,爲它提供了一個Objective-C API。

爲了節省:

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

我有一個項目在OSX和iOS之間共享一個共同的庫。我的登錄管理主要包含在該共享庫中。我從頭文件中刪除了#import ,並且這對於OSX和iOS都能編譯好。 **我還沒有測試過OSX客戶端。 +1代碼可重複使用。 – 2013-06-07 10:11:22

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 2011-05-12 00:28:09

+0

是的,NSUserDefaults用於存儲一次性用戶相關值。 – Rayfleck 2011-05-12 00:29:59

+0

好!非常感謝! – dcolumbus 2011-05-12 00:42:44

5

在一個不安全的文件存儲安全數據(用戶默認設置)通常不是一個好主意。研究加密敏感登錄信息等的Keychain Services。

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

+0

我剛剛在幫助中閱讀了這篇文章,看起來像我需要的!我假設,隨着密碼,你還可以在鑰匙串內存儲其他類型的信息? – dcolumbus 2011-05-12 00:48:34

+0

我自己並沒有太多的使用它,所以我不能給出明確的答案,但我確信你可以存儲一些用戶信息和認證數據。如果您正在尋找示例,請[從這裏查看文檔中的示例項目](http://developer.apple.com/library/ios/#samplecode/GenericKeychain/Introduction/Intro.html)。 – 2011-05-12 01:05:46