3

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 リクエストで同じです。省略記号はプライバシーのためのものであり、セマンティックな意味を持つ文字列のプレースホルダーです。

4

3 に答える 3

4

代わりに試す

request.cachePolicy = NSURLRequestReloadIgnoringLocalAndRemoteCacheData;

NSURLRequestReloadIgnoringCacheDataはローカル キャッシュ データのみを無視し、ネットワーク上にはキャッシュしないためです。

編集: Steve Madsen が以下で指摘しているように、これは本当の問題ではなく、一般に、POST 要求への応答はどのような場合でもキャッシュされません。実際の問題は、プログラムが 2 回のログインの間に誤ってログアウトしなかったことです。しかし、最終的には修正しました!

于 2012-12-09T20:34:16.577 に答える
1

私は同じ問題を抱えており、最終的に修正されました。メソッドの使用:

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

このブログ投稿から : AFNetworking でキャッシングがどのように機能するか? : AFImageCache & NSUrlCache の説明

于 2014-03-20T01:51:01.847 に答える