【问题标题】:HTTP sessions are removed after the app is closed (iPhone app)应用程序关闭后 HTTP 会话被删除(iPhone 应用程序)
【发布时间】:2013-01-27 19:18:38
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: php iphone session afnetworking


    【解决方案1】:

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

    保存cookies(你应该先检查cookie的名字,我的是PHPSESSID,因为你不想保存无用的cookies):

        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];
      }
    

    【讨论】:

      【解决方案2】:
      NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL: networkServerAddress];
      for (NSHTTPCookie *cookie in cookies) 
      {
          [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-11-15
        • 2011-10-31
        • 2016-08-04
        • 2015-07-03
        • 2017-06-22
        • 2017-09-18
        • 2012-03-23
        相关资源
        最近更新 更多