有人可以告诉我如何使用AFNetworking for iOS保存Cookie FOREVER吗?我正在使用ios7,但我认为这不重要吗?
用例是在成功通过Web服务进行身份验证后,它为我提供了两个cookie,我需要传递每个请求。这些cookie永远不会过期,或者从现在开始过期。只要我有每个HTTPS请求的cookie,用户就不必再次登录。我知道AFNetworking会自动保留cookie,直到你退出应用程序,但我需要cookie一直持续到用户从手机中删除应用程序。
1)验证成功后,网络服务会给我两个cookie。我如何访问它们?我是否直接进入NSHTTPCookie存储并以其名称获取cookie,或者是否有AFNetworking“方式”来执行此操作?
2)如何永久保存这两个魔术cookie,以便AFHTTPClient的子类将这两个魔术cookie与每个请求一起传递?我只是将它们保存在钥匙串或NSUserDefaults或NSURLCredentialsStorage中吗?或者还有一种AFNetworking方式来做到这一点?我在AFNetworking中读到了一个setAuthorization()方法,但我不确定这是否也适用于用户名/密码和cookie。
3)如何以AFNetworking的方式删除这些cookie?
谢谢!
答案 0 :(得分:19)
AFNetworking没有明确地对cookie做任何事情,因此没有处理cookie的“AFNetworking方式”。您将使用NSHTTPCookie和NSHTTPCookieStorage。
在我的项目中,我不需要做任何特定于让他们使用cookie的请求。如果您需要不同于AFNetworking默认提供的请求行为,则覆盖requestWithMethod:path:parameters:
子类中的AFHTTPClient
。
获取从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。有一些trickiness需要注意。如果您自己保存了cookie,请删除存储的值,但这是合适的。
NSArray* cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:theUrl];
for (NSHTTPCookie* cookie in cookies) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
}