使用AFNetworking,每次启动应用程序后PHPSESSID都会发生变化

时间:2012-11-04 19:01:21

标签: ios session cookies afnetworking

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

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

2 个答案:

答案 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时,我会有一个复选框,要求用户记住我;基本上要求他们允许将他们的信用卡存放在手机上。

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