首页 文章

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

提问于
浏览
10

有人可以告诉我如何使用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?

谢谢!!

1 回答

  • 19

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

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

    • 例如,获取从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:...
    
    • This answer表示要在Cookie上设置过期日期 . 如果您想自己保留cookie,可以将cookie转换为字典并保存 . This answer说要使用钥匙串 .
    NSMutableDictionary* cookieDictionary = [NSMutableDictionary dictionaryWithDictionary:cookiePrefs];
    for (NSHTTPCookie* cookie in cookies) {
       [cookieDictionary setValue:cookie.properties forKey:cookie.name];
    }
    
    • 从NSHTTPCookieStorage中删除cookie . 还有一些需要注意的问题 . 如果您自己保存了cookie,请删除存储的值,但这是合适的 .
    NSArray* cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:theUrl];
    for (NSHTTPCookie* cookie in cookies) {
       [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
    }
    

相关问题