POST请求返回不需要的缓存结果(AFNetworking)

时间:2012-12-09 03:30:55

标签: ios caching post afnetworking

我正在使用AFNetworking从共享的“身份验证器”类发出POST请求,该类传递用户的用户名和密码。这是我发出的POST请求:

 NSURL *url = [NSURL URLWithString:@"https://www..."];
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];

// params
NSDictionary* dict = @{@"loginName": username,
@"password": password,
@"serviceName": @"...",
@"serviceURL": @"...",
@"action": @"..."};

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
request = [httpClient requestWithMethod:@"POST" path:@"..." parameters:dict];
request.cachePolicy = NSURLRequestReloadIgnoringCacheData;
request.timeoutInterval = 30.0;

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"%@", operation.responseString);
}
                                 failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                                     NSLog(@"login failed");
                                 }];

[operation start];

首次登录时效果非常好,一切都按预期返回。当我尝试使用不同的用户名/密码登录时,我看到operation.responseString的输出与第一次登录的输出完全相同。

有谁知道为什么它会从第一次登录返回输出?我觉得响应是一个缓存的响应,我添加了以下内容以试图阻止缓存信息的返回:

request.cachePolicy = NSURLRequestReloadIgnoringCacheData;

我设置了断点,以查看NSDictionary中参数的用户名和密码是新的用户名/密码组合。

字符串文字也不会被操纵,并且在每个POST请求中都是相同的。 elipses用于隐私,是具有语义含义的字符串的占位符。

3 个答案:

答案 0 :(得分:4)

尝试改为

request.cachePolicy = NSURLRequestReloadIgnoringLocalAndRemoteCacheData;

因为NSURLRequestReloadIgnoringCacheData只忽略本地缓存数据而不在网络上缓存。

编辑:正如史蒂夫·马德森在下面指出的那样,这不是真正的问题,而且,一般来说,在任何情况下都不会缓存对POST请求的响应。实际问题是程序没有错误地在两次登录之间注销。但我们最终确实修好了它!

答案 1 :(得分:1)

我有同样的问题,最后修好了。使用方法:

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0
                                                           diskCapacity:0
                                                               diskPath:nil];
[NSURLCache setSharedURLCache:sharedCache];

来自此博文:How Does Caching Work in AFNetworking? : AFImageCache & NSUrlCache Explained

答案 2 :(得分:-1)

试试吧     [请求setHTTPShouldHandleCookies:NO];