2009-11-02 3 views
11

Ich hoffe, jemand kann etwas Licht auf die folgenden, ich denke, ich bin in die richtige Richtung mit diesem Thema. Ich möchte mich mit einem User/Pass-Combo auf meinem Server einloggen, dann muss ich in der Lage sein zu sagen Wenn ich mich korrekt angemeldet habe (ein Cookie sollte gelöscht werden), dann werde ich eine weitere Anfrage machen, wenn dies der Fall ist.iPhone Machen Sie POST-Anfrage, behandeln Cookie

Jede Hilfe dankbar, heres der Code Ich arbeite mit:

[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways]; 

NSString *post =[NSString stringWithFormat:@"name=%@&pass=%@",@"foo", @"bar"]; 
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; 

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
[request setURL:[NSURL URLWithString:@"http://www.mywebserver.com/login.php"]]; 
[request setHTTPMethod:@"POST"]; 
[request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
[request setHTTPBody:postData]; 

NSError *error; 
NSURLResponse *response; 
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
NSString *data=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding]; 
NSLog(data); 

// HOW to Check if there was a Cookie dropped?? 


// Make another request.. 

Antwort

10

Diese Arbeit sollte:

NSDictionary *headerFields = [(NSHTTPURLResponse*)response allHeaderFields]; 
NSURL *url = [NSURL URLWithString:@"http://www.mywebserver.com/login.php"]; 
NSArray *cookies = [NSHTTPCookie cookiesWithResponseHeaderFields:headerFields forURL:url]; 

wissen Sie können dann, wenn die cookies Array das Cookie enthält, die Sie wollen.

Man könnte dies auch anrufen nach Erhalt der Antwort:

NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:url]; 
3

Hier ist eine mögliche Lösung, um Ihre aktuellen Code verwendet:

1 - Was Sie tun am Anfang gut ist: die Cookie-Richtlinieneinstellung allgemein.

NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHttpCookieStorage]; 
[cookieStorage setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways]; 

2 - Danach wird in Sie Anfragen, müssen Sie angeben, dass Sie die Cookies verwenden möchten (um die Sitzungsinformationen zu injizieren):

[request setHTTPShouldHandleCookies:YES]; 

Sie müssen dieses Feld, um festzulegen die Authentifizierung und die nachfolgenden Anfragen.

+0

Nur eine schnelle Korrektur, sollte es lesen: 'NSHTTPCookieStorage * cookieStorage = [NSHTTPCookieStorage sharedHttpCookieStorage];' Danke für die Info! –

+1

Danke, dass Sie Anson darauf hingewiesen haben, nur die Korrektur. – Sauleil

Verwandte Themen