我第一次启动我的应用程序并登录时,我得到一个会话,我需要做一些我的查询(这是我知道谁登录的。)
无论如何,如果我杀了应用程序并重新启动它,我会得到一个新的会话ID。为什么?在过去,我的ios应用程序存储了会话cookie。我想。
答案 0 :(得分:4)
您需要在应用终止前使用NSCoding
手动将Cookie保存到磁盘,然后在应用启动时加载它们,如下所示:
NSData *cookiesData = [[NSUserDefaults standardUserDefaults] objectForKey:@"SavedCookies"];
if ([cookiesData length] > 0) {
for (NSHTTPCookie *cookie in [NSKeyedUnarchiver unarchiveObjectWithData:cookiesData]) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
}
}
答案 1 :(得分:2)
HTTP会话的设计是短暂的。通常,这被设置为浏览器的生命周期或最近浏览器选项卡的生命周期。有些浏览器现在会在应用程序启动之间存储会话,只要浏览器选项卡保持打开状态,这对用户来说很方便。
如果之前的应用程序在应用程序启动和终止之间保持会话,这是实现会话存储方式的错误。
我不建议使用会话来存储长期存在的数据。为此,请使用NSUserDefaults
或考虑使用SqlLite存储。
编辑地址评论问题:
我应该如何构建应用程序,以便用户只需在安装应用程序时登录一次。
根据您拥有的系统部分,有多种方法可以实现此目的。
最简单的方案概念是您拥有网络服务。在这种情况下,您可以存储用户凭据,每次启动应用程序时,都会将用户登录,并像现在一样使用该会话ID。
为此构建UI时,我会有一个复选框,要求用户记住我;基本上要求他们允许将他们的信用卡存放在手机上。
技巧部分是如何正确保护用户凭据。