2009-11-02 47 views
11

Tôi hy vọng một người nào đó có thể làm sáng tỏ một số điều sau đây, tôi nghĩ rằng tôi đang đi đúng hướng với điều này. Tôi muốn đăng nhập vào máy chủ của tôi với một combo người dùng/pass, sau đó tôi cần phải có thể cho biết Nếu tôi đăng nhập một cách chính xác (một cookie nên được bỏ), sau đó tôi sẽ thực hiện một yêu cầu nếu đây là trường hợp.iPhone Thực hiện yêu cầu POST, xử lý cookie

Bất kỳ giúp đánh giá cao, heres mã tôi đang làm việc với:

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

Trả lời

10

này nên làm việc:

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

Sau đó, bạn có thể biết nếu mảng cookies chứa cookie mà bạn muốn.

Bạn cũng có thể gọi đây là sau khi nhận được câu trả lời:

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

Đây là một giải pháp khả thi sử dụng mã hiện tại của bạn:

1 - Những gì bạn làm ngay từ đầu là tốt: thiết lập các chính sách Cookie nói chung là.

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

2 - Sau đó, trong bạn yêu cầu, bạn cần phải xác định rằng bạn muốn sử dụng cookie (để tiêm các thông tin session):

[request setHTTPShouldHandleCookies:YES]; 

Bạn cần phải thiết lập lĩnh vực này xác thực và các yêu cầu tiếp theo.

+0

Chỉ cần một sự điều chỉnh nhanh chóng, nó nên đọc: 'NSHTTPCookieStorage * cookieStorage = [NSHTTPCookieStorage sharedHttpCookieStorage]; ' Cảm ơn thông tin! –

+1

Cảm ơn bạn đã chỉ ra rằng Anson, vừa sửa lỗi. – Sauleil

Các vấn đề liên quan