如何使用AFNetworking永久保存cookie,直到从iPhone删除应用程序?

use*_*719 10 cookies ios afnetworking

有人可以告诉我如何使用AFNetworking for iOS保存cookie FOREVER吗?我正在使用ios7,但我认为这不重要吗?

用例是在成功通过Web服务进行身份验证后,它为我提供了两个cookie,我需要传递每个请求.这些cookie永远不会过期,或者从现在开始过期.只要我有每个HTTPS请求的cookie,用户就不必再次登录.我知道AFNetworking会自动保留cookie,直到您退出应用程序,但我需要cookie一直持续到用户从手机中删除应用程序.

1)成功验证后,Web服务向我发送两个cookie.我如何访问它们?我是否直接进入NSHTTPCookie存储并以其名称获取cookie,或者是否有AFNetworking"方式"来执行此操作?

2)如何永久保存这两个神奇的cookie,以便AFHTTPClient的子类与每个请求一起传递这两个神奇的cookie?我只是将它们保存在钥匙串或NSUserDefaults或NSURLCredentialsStorage中吗?或者还有一种AFNetworking方式来做到这一点?我在AFNetworking中读到了一个setAuthorization()方法,但我不确定这是否也适用于用户名/密码和cookie.

3)如何以AFNetworking方式删除这些cookie?

谢谢!!

Jas*_*son 19

AFNetworking没有明确地使用cookie做任何事情,因此没有处理cookie的"AFNetworking方式".您将使用NSHTTPCookie和NSHTTPCookieStorage.

在我的项目中,我不需要做任何特定于让他们使用cookie的请求.如果您需要不同于AFNetworking默认提供的请求行为,则requestWithMethod:path:parameters:AFHTTPClient子类中重写.

  1. 例如,获取从AFJSONRequest返回的cookie

    NSURLRequest* request = <some request returned from your AFHTTPClient subclass>
    AFJSONRequestOperation* op = [AFJSONRequestOperation JSONRequestOperationWithRequest:request 
     success:^(NSURLRequest* request, NSHTTPURLResponse* response, id userData) {
        NSArray* cookies = [NSHTTPCookie cookiesWithResponseHeaderFields:[response allHeaderFields] forURL:url];
     }
     failure:...
    
    Run Code Online (Sandbox Code Playgroud)
  2. 这个答案说要在cookie上设置一个到期日期.如果您想自己保留cookie,可以将cookie转换为字典并保存.这个答案说使用钥匙串.

    NSMutableDictionary* cookieDictionary = [NSMutableDictionary dictionaryWithDictionary:cookiePrefs];
    for (NSHTTPCookie* cookie in cookies) {
       [cookieDictionary setValue:cookie.properties forKey:cookie.name];
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 从NSHTTPCookieStorage中删除cookie.需要注意一些棘手的问题.如果您自己保存了cookie,请删除存储的值,但这是合适的.

    NSArray* cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:theUrl];
    for (NSHTTPCookie* cookie in cookies) {
       [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
    }
    
    Run Code Online (Sandbox Code Playgroud)