2

GET リクエストを使用して NSURLConnection を使用してサーバーに接続しています。ログインするには、フォームの 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 policyしてくださいNSURLRequestReloadIgnoringCacheData

このデリゲート メソッドを追加してみてください。

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

このメソッドが呼び出されていることを確認してください。

NSURLCredentialStorage とを使用しremoveCredentialて、 によって保存されているクレデンシャルのキャッシュを消去しますNSURLConnection

こちらの回答もご確認ください。

うまくいくことを願っています

于 2012-04-13T05:35:26.940 に答える