1

我第一次启动我的应用程序并登录时,我得到一个会话,我需要做一些查询(这是我知道谁登录的方式)。

无论如何,如果我终止应用程序并重新启动它,我会得到一个新的会话 ID。为什么?过去,我的 ios 应用程序存储了会话 cookie。我想。

4

2 回答 2

4

您需要在应用程序终止之前手动将 cookie 保存到磁盘,NSCoding然后在应用程序启动时加载它们,如下所示:

NSData *cookiesData = [[NSUserDefaults standardUserDefaults] objectForKey:@"SavedCookies"];
if ([cookiesData length] > 0) {
    for (NSHTTPCookie *cookie in [NSKeyedUnarchiver unarchiveObjectWithData:cookiesData]) {
        [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
    }
}
于 2012-11-05T07:12:52.057 回答
2

HTTP 会话被设计为短暂的。通常,这被设置为浏览器的生命周期,或者最近设置为浏览器选项卡的生命周期。一些浏览器现在将在应用程序启动之间存储会话,只要浏览器选项卡保持打开状态,但这对用户来说是一种方便。

如果您以前的应用程序在应用程序启动和终止之间保持会话,那么这是关于如何存储会话的实现中的一个错误。

我不建议使用会话来存储长期存在的数据。为此,使用NSUserDefaults或考虑使用 SqlLite 存储。

编辑地址评论问题:

我应该如何构建应用程序,以便用户在安装应用程序时只需登录一次。

有多种方法可以实现这一点,具体取决于您拥有系统的哪些部分。

从概念上讲,最简单的场景是您拥有 Web 服务。在这种情况下,您可以存储用户凭据,并且每次启动应用程序时,让用户登录,并像现在一样使用该会话 ID。

在为此构建 UI 时,我会有一个复选框,要求用户记住我;基本上是要求他们允许在手机上存储他们的信用。

技巧部分是如何正确保护用户凭据。

于 2012-11-04T19:13:52.937 回答