我正在使用 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/