2009-04-21 37 views

Trả lời

168

Ứng dụng của bạn có "jar cookie" riêng trong vùng chứa [NSHTTPCookieStorage sharedHTTPCookieStorage].

Đây là cách bạn có thể có một cái nhìn nhanh chóng tại các cookie trong jar cookie của ứng dụng của bạn:

NSHTTPCookie *cookie; 
NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
for (cookie in [cookieJar cookies]) { 
    NSLog(@"%@", cookie); 
} 

Một số phương pháp có sẵn để lọc và thao tác. Hãy xem tài liệu NSHTTPCookieStorage để truy cập cookie và tài liệu NSHTTPCookie để truy cập các thuộc tính cookie riêng lẻ.

+1

Nó thật thú vị. Tôi không biết một thứ như vậy tồn tại. Cảm ơn đã chỉ ra điều đó. –

+0

Cảm ơn, Alex! Chính xác những gì tôi đang tìm kiếm. – dot

+0

Thật tuyệt vời! Làm thế nào để đăng nhập một cookie cụ thể cho một máy chủ cụ thể? –

20

Cảm ơn con trỏ Alex! Để thêm vào điều này tôi sẽ thả vào "dumper cookie" của tôi mà tôi tạo ra bằng cách sử dụng ví dụ của Alex. Có lẽ điều này sẽ giúp người khác.

- (void) dumpCookies:(NSString *)msgOrNil { 
NSMutableString *cookieDescs = [[[NSMutableString alloc] init] autorelease]; 
NSHTTPCookie *cookie; 
NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
for (cookie in [cookieJar cookies]) { 
    [cookieDescs appendString:[self cookieDescription:cookie]]; 
} 
NSLog(@"------ [Cookie Dump: %@] ---------\n%@", msgOrNil, cookieDescs); 
NSLog(@"----------------------------------"); 
} 

- (NSString *) cookieDescription:(NSHTTPCookie *)cookie { 

NSMutableString *cDesc  = [[[NSMutableString alloc] init] autorelease]; 
[cDesc appendString:@"[NSHTTPCookie]\n"]; 
[cDesc appendFormat:@" name   = %@\n",   [[cookie name] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 
[cDesc appendFormat:@" value   = %@\n",   [[cookie value] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 
[cDesc appendFormat:@" domain   = %@\n",   [cookie domain]]; 
[cDesc appendFormat:@" path   = %@\n",   [cookie path]]; 
[cDesc appendFormat:@" expiresDate  = %@\n",   [cookie expiresDate]]; 
[cDesc appendFormat:@" sessionOnly  = %d\n",   [cookie isSessionOnly]]; 
[cDesc appendFormat:@" secure   = %d\n",   [cookie isSecure]]; 
[cDesc appendFormat:@" comment   = %@\n",   [cookie comment]]; 
[cDesc appendFormat:@" commentURL  = %@\n",   [cookie commentURL]]; 
[cDesc appendFormat:@" version   = %d\n",   [cookie version]]; 

// [cDesc appendFormat:@" portList  = %@\n",   [cookie portList]]; 
// [cDesc appendFormat:@" properties  = %@\n",   [cookie properties]]; 

return cDesc; 
} 
+0

Bạn thậm chí có thể thêm loại này làm danh mục để mở rộng 'NSHTTPCookieStorage': http://macdevelopertips.com/objective-c/objective-c-categories.html –

+0

+1 để trích xuất logic về cách hiển thị cookie thành phương pháp riêng biệt! Ngay cả đối với một đoạn nhỏ như vậy, nó giúp !! – Guven

+0

Cảm ơn bạn! Có lỗi chính tả: [phiên bản cookie] là NSUInteger, vì vậy% d nên được sử dụng. –

3

Alex có ý tưởng tuyệt vời về việc đặt tên này vào danh mục. Đây là những gì tôi đã kết thúc bằng:

NSHTTPCookieStorage + Info.h

#import <Foundation/Foundation.h> 

@interface NSHTTPCookieStorage (Info) 

+ (NSDictionary*) describeCookies; 
+ (NSDictionary *) describeCookie:(NSHTTPCookie *)cookie; 

@end 

NSHTTPCookieStorage.m

@implementation NSHTTPCookieStorage (Info) 

+ (NSDictionary*) describeCookies { 
    NSMutableDictionary *descriptions = [NSMutableDictionary new]; 

    [[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies] enumerateObjectsUsingBlock:^(NSHTTPCookie* obj, NSUInteger idx, BOOL *stop) { 
     [descriptions setObject:[[self class] describeCookie:obj] forKey:[[obj name] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 
    }]; 

    NSLog(@"Cookies:\n\n%@", descriptions); 
    return descriptions; 
} 

+ (NSDictionary *) describeCookie:(NSHTTPCookie *)cookie { 
    return @{@"value" : [[cookie value] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding], 
     @"domain" : [cookie domain] ? [cookie domain] : @"n/a", 
     @"path" : [cookie path] ? [cookie path] : @"n/a", 
     @"expiresDate" : [cookie expiresDate] ? [cookie expiresDate] : @"n/a", 
     @"sessionOnly" : [cookie isSessionOnly] ? @1 : @0, 
     @"secure" : [cookie isSecure] ? @1 : @0, 
     @"comment" : [cookie comment] ? [cookie comment] : @"n/a", 
     @"commentURL" : [cookie commentURL] ? [cookie commentURL] : @"n/a", 
     @"version" : @([cookie version]) }; 

} 

@end 

Làm cho sản lượng nhiều hơn một chút "JSON-y" ...

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