2009-11-02 10 views
11

J'espère que quelqu'un peut faire la lumière sur ce qui suit, je pense que je suis dans la bonne direction avec cela. Je veux me connecter à mon serveur avec un combo utilisateur/passe, alors je dois pouvoir dire Si je me suis connecté correctement (un cookie devrait être supprimé), alors je ferai une autre demande si c'est le cas.iPhone Faire une demande POST, gérer cookie

Toute aide appréciée, Heres le code, je travaille avec:

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

Répondre

10

Cela devrait fonctionner:

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

Ensuite, vous pouvez savoir si le tableau contient cookies le cookie que vous voulez.

Vous pouvez aussi appeler cela après avoir reçu la réponse:

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

Voici une solution possible en utilisant votre code actuel:

1 - Ce que vous faites au début est bon: le réglage de la politique des cookies généralement.

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

2 - Après cela, en vous demande, vous devez spécifier que vous souhaitez utiliser des cookies (afin d'injecter les informations de session):

[request setHTTPShouldHandleCookies:YES]; 

Vous devez définir ce champ pour l'authentification et les demandes suivantes.

+0

Juste une correction rapide, il faut lire: 'NSHTTPCookieStorage * cookieStorage = [NSHTTPCookieStorage sharedHttpCookieStorage];' Merci pour l'info! –

+1

Merci d'avoir signalé cela à Anson. – Sauleil