在NSUserDefaults中保存全局值是安全/良好的做法吗?

时间:2010-08-31 00:32:24

标签: iphone objective-c

  1. 我正在制作一款iPhone应用程序 需要用户名和密码 所有要求的屏幕 服务器,我在想 保存这两个值 NSUserDefault而不是传递 对象。

  2. 我也认为如果用户登录一次会很有用,     并再次使用该应用程序然后用户     不必输入他/她的详细信息     试。

  3. 但我很好奇是否可以安全/良好地使用第一项要求?

2 个答案:

答案 0 :(得分:6)

我没有反对在用户默认值上保存这些数据。我没有得到的是在每个请求上公开用户凭据的想法。

我建议你一次要求提供凭据,与服务器进行身份验证并返回“会话令牌”。保存此令牌并使用它来验证每个请求的用户。 (这意味着您将在您的服务器上保存令牌,或者您将使用算法检查令牌)

执行此操作时,您不会始终公开用户凭据,您可以控制会话,并且可以在需要时使其过期,从而强制用户再次登录。

对于更复杂的实施,您可以使用Google for OAuth或XAuth以及一些相关的身份验证方法。

干杯, VFN

答案 1 :(得分:3)

在NSUserDefault中保存全局值是合理的,您希望在应用程序被杀死和重新启动后能够存活(在iOS4.0下可能会发生这种情况)。

密码应保存在内存(可能是单件模型对象)或密钥链中,因为各种iTunes备份数据库可能会暴露存储在用户默认值中的内容。