2009-03-27 29 views
23

Tôi đang cố gửi một chuỗi xác thực qua cookie trong NSMutableURLRequest. Tôi đang cố gắng để tạo ra các NSHTTPCookie quaTạo cookie cho NSURLRequest?

+(id)cookieWithProperties:(NSDictionary *)properties 

Nhưng nơi nào đã Tôi có thể tìm thấy làm thế nào để xác định các tính chất khác so với cặp khóa-giá trị đơn giản, tôi có để xác thực. Khi tôi chỉ sử dụng cặp khóa-giá trị của mình, nil được trả về.

Bất kỳ ví dụ, tài liệu hoặc suy nghĩ nào về điều này sẽ được đánh giá cao.

+0

Vui lòng đăng mã bạn đang sử dụng để tạo cookie; bạn đã xem http://developer.apple.com/DOCUMENTATION/Cocoa/Reference/Foundation/Classes/NSHTTPCookie_Class/Reference/Reference.html#//apple_ref/doc/uid/20001702-425346 – sbooth

Trả lời

19

Đây là cách bạn thiết lập các thuộc tính trong một cookie:

NSDictionary *properties = [NSDictionary dictionaryWithObjectsAndKeys: 
           url, NSHTTPCookieOriginURL, 
           @"testCookies", NSHTTPCookieName, 
           @"1", NSHTTPCookieValue, 
           nil]; 
    NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:properties]; 

Trong ví dụ trên: url, testCookies, và 1giá trị. Tương tự, NSHTTPCookieOriginURL, NSHTTPCookieName, NSHTTPCookieValue là các phím cho đối tượng NSDictionary, như trong cặp khóa-giá trị.

Bạn đặt/nhận các thuộc tính sử dụng NSDictionary và thêm vào NSHTTPCookie.

+4

Thực ra tôi đã không có thể làm cho nó hoạt động, chỉ với NSHTTPCookieDomain và NSHTTPCookiePath. Xem câu trả lời của jm. Ngoài ra: http://lists.apple.com/archives/Webkitsdk-dev/2003/Sep/msg00003.html – mfazekas

+0

Tôi đã có thể sử dụng NSHTTPCookieOriginURL miễn là tôi * cũng * chỉ định NSHTTPCookiePath (nhờ jm bên dưới cho gợi ý) . Lưu ý rằng bạn có thể sử dụng phương thức đường dẫn trên url để cung cấp giá trị (nghĩa là [đường dẫn url]). –

37

tôi nhận thấy trên, trên 2.2.1 iphone của tôi, rằng cookie đã không được tạo ra nếu NSHTTPCookiePath không được xác định, mặc dù nó được hiển thị như là "bắt buộc" trong tài liệu:

Vì vậy, tôi làm :

NSDictionary *properties = [NSDictionary dictionaryWithObjectsAndKeys: 
          @"domain.com", NSHTTPCookieDomain, 
          @"/", NSHTTPCookiePath, // IMPORTANT! 
          @"testCookies", NSHTTPCookieName, 
          @"1", NSHTTPCookieValue, 
          nil]; 
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:properties]; 

NSArray* cookies = [NSArray arrayWithObjects: cookie, nil]; 

NSDictionary * headers = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies]; 

[request setAllHTTPHeaderFields:headers]; 
7

Tôi không thể làm việc đó.

tôi để làm việc này tuy nhiên:

NSMutableURLRequest* ret = [NSMutableURLRequest requestWithURL:myURL]; 
[ret setValue:@"myCookie=foobar" forHTTPHeaderField:@"Cookie"];
6

Tôi đã tìm thấy một sai lầm trong ví dụ jm của: NSHTTPCookiePath nên @"/", nhưng không @"\\\\".

NSDictionary *properties = [NSDictionary dictionaryWithObjectsAndKeys: 
          @"domain.com", NSHTTPCookieDomain, 
          @"/", NSHTTPCookiePath, // IMPORTANT! 
          @"testCookies", NSHTTPCookieName, 
          @"1", NSHTTPCookieValue, 
          nil]; 
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:properties]; 

NSArray* cookies = [NSArray arrayWithObjects: cookie, nil]; 

NSDictionary * headers = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies]; 

[request setAllHTTPHeaderFields:headers]; 
+0

Tôi đã cập nhật câu trả lời của mình. Có vẻ hợp lý, mặc dù tôi không có một iphone để kiểm tra trên nữa. –

0

chính NSHTTPCookiePath nên tồn tại trong từ điển khi sử dụng

[NSHTTPCookie cookieWithProperties:dictionary] 

phương pháp cho dù sử dụng NSHTTPCookieDomain hoặc NSHTTPCookieOriginURL. Và giá trị cho NSHTTPCookiePath phải là @"/" không phải @"\\".

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