首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSURL缓存问题

NSURL缓存问题
EN

Stack Overflow用户
提问于 2013-10-11 14:46:21
回答 2查看 150关注 0票数 0

我的登录API有问题。第一次调用运行良好,但随后的调用被缓存。这导致了一个问题,因为登录/注销功能实际上已经崩溃。

我尝试过许多方法,并且正在实现AFNetworking库。

AppDelegate.m

代码语言:javascript
复制
NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0
                                                        diskCapacity:0
                                                            diskPath:nil];
[NSURLCache setSharedURLCache:sharedCache];

在我的社交课上:

代码语言:javascript
复制
 (AFHTTPRequestOperation *)createRequestOperationWithMethod:(NSString *) method andPath:    (NSString *)path andParams:(NSDictionary *)params
{
  GRAPIClient *httpClient = [GRAPIClient sharedClient];
  [httpClient setParameterEncoding:AFFormURLParameterEncoding];
  NSMutableURLRequest *request = [httpClient requestWithMethod:method
                                                 path:path
                                           parameters:params];

  [request setCachePolicy:NSURLRequestReloadIgnoringCacheData]

  AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[httpClient registerHTTPOperationClass:[AFHTTPRequestOperation class]];
return operation;

}

我甚至试图覆盖在AFHTTPClient中生成的请求。

在AFHTTPClient.m中:

代码语言:javascript
复制
[request setCachePolicy:NSURLRequestReloadIgnoringCacheData];
[request setTimeoutInterval:2.0];

我的GRAPIClient实现:

代码语言:javascript
复制
@interface GRAPIClient : AFHTTPClient

+ (GRAPIClient *)sharedClient;
+ (BOOL) isInternetReachable;

@end

@implementation GRAPIClient

+ (BOOL) isInternetReachable
{
    return reachable;
}

+ (GRAPIClient *)sharedClient {
    static GRAPIClient *_sharedClient = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _sharedClient = [[GRAPIClient alloc] initWithBaseURL:[NSURL    URLWithString:kAFAppDotNetAPIBaseURLString]];
});

[_sharedClient setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    if (status == AFNetworkReachabilityStatusReachableViaWWAN ||
        status == AFNetworkReachabilityStatusReachableViaWiFi ) {
        NSLog(@"Reachable on!");
        reachable = YES;
    }
    else
    {
        NSLog(@"Reachable off!");
        reachable = NO;
    }
}];

return _sharedClient;
}

- (id)initWithBaseURL:(NSURL *)url {
    self = [super initWithBaseURL:url];
    if (!self) {
        return nil;
    }

    [self registerHTTPOperationClass:[AFJSONRequestOperation class]];    
// Accept HTTP Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.1
[self setDefaultHeader:@"Accept" value:@"application/json"];
    return self;
}
@end

我已经调试了来自服务器的响应,并同时对服务器进行了两个NSURLRequests的硬编码测试。一个用于用户A,另一个用于用户B,然后打印两个用户的响应数据。

在第一次登录时,用户A登录返回用户A凭据。用户B返回用户B凭据。在第二次登录时,用户A返回用户A凭据,用户B返回用户A凭据。我不知道如何完全禁用缓存。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-14 14:56:12

正如SixteenOtto所建议的那样,我遇到的问题是从服务器发送会话,并使用cookie自动发送AFNetworking。我以前没有考虑过这一点,因为我们使用的是基于auth令牌的不稳定API,因此会话的cookie没有意义。但是,使用Charles检查HTTP响应头可以让我看到这一点。

添加

代码语言:javascript
复制
[request setHTTPShouldHandleCookies:NO];

我的operation生成器解决了这个问题。

票数 0
EN

Stack Overflow用户

发布于 2013-10-11 18:13:07

尝试:

代码语言:javascript
复制
[operation setCacheResponseBlock:^NSCachedURLResponse*(NSURLConnection* connection, NSCachedURLResponse* cachedResponse) {
    return nil;
}];

和:

代码语言:javascript
复制
[request setCachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19321043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档