2009-11-02 13 views
11

Espero que alguien pueda arrojar algo de luz sobre lo siguiente, creo que voy en la dirección correcta con esto. Quiero iniciar sesión en mi servidor con un combo de usuario/pase, luego necesito poder decir si he iniciado sesión correctamente (se debe eliminar una cookie), luego haré otra solicitud si este es el caso.iPhone Hacer solicitud POST, manejar cookie

Cualquier ayuda apreciada, aquí está el código que estoy trabajando con:

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

Respuesta

10

esto debería funcionar:

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

A continuación, se puede saber si la matriz cookies contiene la cookie que desea.

También podría llamar a esto después de recibir la respuesta:

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

Aquí es una solución posible utilizar el código actual:

1 - Lo que se hace al principio es bueno: el establecimiento de la política de cookies en general.

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

2 - Después de eso, en ustedes peticiones, es necesario especificar que desea utilizar cookies (con el fin de inyectar la información de la sesión):

[request setHTTPShouldHandleCookies:YES]; 

Es necesario establecer este campo durante la autenticación y las solicitudes posteriores.

+0

sólo una corrección rápida, debe decir: ' NSHTTPCookieStorage * cookieStorage = [NSHTTPCookieStorage sharedHttpCookieStorage];' Gracias por la info! –

+1

Gracias por señalar eso, Anson, acabo de hacer la corrección. – Sauleil

Cuestiones relacionadas