2009-11-02 11 views
11

Mam nadzieję, że ktoś może rzucić trochę światła na następujące, myślę, że zmierzam w dobrym kierunku z tym. Chcę się zalogować na mój serwer za pomocą komendy user/pass, a następnie muszę być w stanie powiedzieć, czy poprawnie zalogowałem się (plik cookie powinien zostać usunięty), to w takim przypadku złożę kolejną prośbę.iPhone Zrobić żądanie POST, obsługiwać ciasteczko

Każda pomoc mile widziane, herezje kod pracuję z:

[[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.. 

Odpowiedz

10

To powinno działać:

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

Następnie można wiedzieć, czy tablica zawiera cookies cookie chcesz.

Można również zadzwonić to po otrzymaniu odpowiedzi:

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

Oto możliwe rozwiązanie przy użyciu bieżącego kodu:

1 - Co zrobić, na początku jest dobra: ustawienie Cookie Policy ogólnie.

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

2 - Po tym, w was wniosków, trzeba określić, że chcesz używać ciasteczek (aby wstrzyknąć informacje o sesji):

[request setHTTPShouldHandleCookies:YES]; 

trzeba ustawić to pole dla uwierzytelnianie i kolejne żądania.

+0

Tylko szybka korekta, należy przeczytać: 'NSHTTPCookieStorage * cookieStorage = []; NSHTTPCookieStorage sharedHttpCookieStorage' Dzięki za info! –

+1

Dzięki za wskazanie, że na Anson, właśnie zrobiłem korektę. – Sauleil