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

标签 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 请求中都是相同的。省略号是为了保护隐私,是具有语义意义的字符串的占位符。

最佳答案

试试看

request.cachePolicy = NSURLRequestReloadIgnoringLocalAndRemoteCacheData;

因为 NSURLRequestReloadIgnoringCacheData 只忽略本地缓存数据,不会缓存到网络上。

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

关于ios - POST 请求返回不需要的缓存结果 (AFNetworking),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13784356/

相关文章:

python - Web API 客户端包装器的缓存算法

Angular - 缓存 http 响应的最佳方式

jquery - AJAX POST 无法更新 MySQL 数据库的问题

iphone - iOS 的 OTA 分发 — 对 iOS 4 没有影响

iphone - 未调用 willSendRequestForAuthenticationChallenge

php - Varnish不会在没有过期 header 的情况下进行缓存

c# - 如何获取在ASP.Net应用程序URL中传递的POST和GET数据?

javascript - Angular JS Post 不起作用

javascript - 在数组中保存类+拼接删除错误的对象

ios - 如何知道键盘何时隐藏?