2

我正在使用 NSURLConnection 与服务器连接,使用 GET 请求。要登录,我正在发送带有表单 url 的 GET 请求

http://<myUserName>:<myPassword>@my.serverurl.com/user/login

一个示例 URL 将是

http://someusername:somepass@www.google.com/user/login 

当我第一次登录时,我传递了正确的用户名和密码,我能够成功登录,如果我传递了错误的用户名或密码,我会收到服务器的响应,说我的用户名和密码不正确.. 一切都很好然后

但是当我使用正确的用户名/密码登录时,进入我的主页。在那里我注销返回登录屏幕。现在我输入了错误的用户名和密码并尝试登录,我得到响应登录成功..这是我的问题。

这意味着我所有后续的登录请求都以错误的用户名和密码成功返回。我用浏览器检查了相同的 url(正确和不正确),一切正常。

这是我用来登录的代码

-(void)postRequest{
    NSMutableURLRequest *request    =   [[NSMutableURLRequest alloc] init] ; 
    [request setURL:[NSURL URLWithString:
              @"http://myusername:mypass@my.serverurl.com/user/login"]]; 
    [request setHTTPMethod:@"GET"];
//    [request setHTTPShouldHandleCookies:NO];   ==> I tried without this first

    loginRequestConnection  =   [[CustomURLConnection alloc]
                                      initCustomURLWithRequest:request 
                                      delegate:self 
                                      withTAG:LOGIN_REQUEST_CONNECTION];
    [request release];
}

现在 CustomURLConnection 只不过是 NSURLConnection 的一个子类,并添加了一个标签来识别委托中的多个连接请求

@interface CustomURLConnection : NSURLConnection{
}
@property()NSInteger tag;
@property(nonatomic, retain) NSMutableData *receivedData;

-(id)initCustomURLWithRequest:(NSURLRequest *)request delegate:(id)delegate withTAG:(NSInteger)tagInt;
@end

我认为问题是 NSURLConnection 请求将 cookie 存储在某处并将它们重用于后续请求。这就是我添加的原因

[request setHTTPShouldHandleCookies:NO];

到代码。但不管有没有这个问题都存在。那么对于导致此问题的原因还有其他建议吗?

4

1 回答 1

3

尝试使用它 initWithURL:cachePolicy:timeoutInterval:并设置cache policyNSURLRequestReloadIgnoringCacheData

尝试添加此委托方法。

 - (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse {   
return nil; 
}

确保调用此方法。

使用NSURLCredentialStorageremoveCredential擦除由 存储的凭据的缓存NSURLConnection

请也检查此答案。

希望有效

于 2012-04-13T05:35:26.940 回答