关闭应用后,会删除HTTP会话(iPhone应用)

时间:2012-11-12 21:02:58

标签: php iphone session afnetworking

在我的iPhone应用程序中,我使用AFNetworking向PHP API发出HTTP请求。

每次打开应用程序时,我都必须登录,服务器才会启动会话。 登录后,每次我向API发出HTTP请求时,API都知道我有会话,并允许我使用API​​的每个功能。

问题是,在我关闭应用程序后,我认为会话已被破坏,我无法使用API​​中的任何功能而无需再次登录。

我在谈论一个iPhone应用程序,它使用AFNetworking来发出HTTP请求。 从我的测试中我知道应用程序关闭后会话被销毁。

我想知道这是否属实,我想知道制作身份验证系统的最佳方式。我认为该会话不再是一个解决方案,因为它们在应用程序关闭后被销毁。我的另一种方法是每次有人登录并在应用程序中存储令牌时创建一个auth_token,然后每当有人打开应用程序时,他们将使第一个http请求包含auth_token,如果该令牌与数据库中的令牌匹配,然后像往常一样初始化会话。我认为这可能会慢一些,前提是每次打开应用程序时都必须发出HTTPS请求来初始化客户端和服务器之间的连接。

所以问题是:关闭应用程序后,您是否可以保持会话活动?它是我的替代品吗?

2 个答案:

答案 0 :(得分:1)

这是我的问题的解决方案。 如果您使用AFNetworking,则在关闭应用程序后会删除cookie。因此,要解决此问题,您可以将Cookie保存为用户默认值,然后在应用程序打开时加载它们。

保存cookie(您应首先检查cookie的名称,我的是PHPSESSID,因为您不想保存无用的cookie):

    NSArray * all = [NSHTTPCookie cookiesWithResponseHeaderFields:[self.response allHeaderFields] forURL:[NSURL URLWithString:@"http://link.to.api" ]];
    for (NSHTTPCookie *cookie in all)
    {
        if([cookie.name compare:@"PHPSESSID"] == NSOrderedSame)
        {
            NSData *data = [NSKeyedArchiver archivedDataWithRootObject:cookie];
            [[NSUserDefaults standardUserDefaults] setObject:data forKey:@"MySavedCookies"];
            [[NSUserDefaults standardUserDefaults] synchronize];
        }
    }

然后当您在“application didFinishLaunchingWithOptions”中加载应用程序时,例如:

  NSData *cookiesdata = [[NSUserDefaults standardUserDefaults] objectForKey:@"MySavedCookies"];
  if([cookiesdata length])
  {
     NSHTTPCookie *cookie = [NSKeyedUnarchiver unarchiveObjectWithData:cookiesdata];
    [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
  }

答案 1 :(得分:0)

NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL: networkServerAddress];
for (NSHTTPCookie *cookie in cookies) 
{
    [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
}