คุกกี้ของ UIWebView ถูกเก็บไว้ที่ไหน?


96

ฉันกำลังสร้างแอพ iPhone ด้วยคุกกี้ การลบคุกกี้ในการตั้งค่า Safari จะไม่ลบคุกกี้ เก็บไว้ที่ไหน? เป็นไปได้ไหมที่จะอ่านจาก UIWebView อื่น

ขอบคุณ!

คำตอบ:


171

แอปพลิเคชันของคุณมี "โถคุกกี้" ของตัวเองอยู่ใน[NSHTTPCookieStorage sharedHTTPCookieStorage]คอนเทนเนอร์

ต่อไปนี้เป็นวิธีที่คุณสามารถดูคุกกี้ในโถคุกกี้ของแอปพลิเคชันของคุณ

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

มีหลายวิธีสำหรับการกรองและการจัดการ ดูเอกสารNSHTTPCookieStorageสำหรับการเข้าถึงคุกกี้และเอกสารNSHTTPCookieสำหรับการเข้าถึงคุณสมบัติคุกกี้แต่ละรายการ


1
นั่นดูน่าสนใจ. ฉันไม่รู้ว่ามีสิ่งนี้อยู่จริง ขอบคุณที่ชี้ให้เห็น
Brad Larson

ขอบคุณอเล็กซ์! สิ่งที่ฉันกำลังมองหา
dot

เยี่ยมมาก! ฉันจะบันทึกคุกกี้เฉพาะสำหรับเซิร์ฟเวอร์เฉพาะได้อย่างไร
Lior Frenkel

หากต้องการรับคุกกี้สำหรับเซิร์ฟเวอร์เฉพาะให้ใช้cookiesForURLวิธีนี้แทนcookies
gyimi

3
วิธีนี้ใช้ไม่ได้จริง ๆ เพราะจะลบคุกกี้จนกว่าคุณจะออกจากแอพ แต่เมื่อคุณเปิดขึ้นมาใหม่คุกกี้จะยังคงอยู่ที่นั่น
Felipe Brahm

21

ขอบคุณสำหรับตัวชี้ Alex! ในการเพิ่มสิ่งนี้ฉันจะทิ้ง "ที่ทิ้งคุกกี้" ของฉันที่ฉันสร้างโดยใช้ตัวอย่างของอเล็กซ์ บางทีนี่อาจจะช่วยคนอื่นได้

- (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;
}

คุณอาจเพิ่มสิ่งนี้เป็นหมวดหมู่เพื่อขยายNSHTTPCookieStorage: macdevelopertips.com/objective-c/objective-c-categories.html
Alex Reynolds

+1 สำหรับการแยกตรรกะของวิธีการแสดงคุกกี้ออกเป็นวิธีแยกต่างหาก! แม้จะเป็นตัวอย่างเล็ก ๆ น้อย ๆ ก็ช่วยได้ !!
Guven

ขอบคุณ! มีการพิมพ์ผิด: [รุ่นคุกกี้] คือ NSUInteger ดังนั้นควรใช้% d
Pavel Alexeev

3

อเล็กซ์มีความคิดที่ดีในการจัดหมวดหมู่นี้ นี่คือสิ่งที่ฉันใช้:

NSHTTPCookieStorage + ข้อมูล 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

ทำให้เอาต์พุตเป็น "JSON-y" มากขึ้นเล็กน้อย ...


1

ในsandbox:Library->Cookies->Cookies.binarycookies แต่คุณไม่สามารถเปิด.binarycookieได้โดยตรงคุณสามารถเรียกใช้สคริปต์:

  1. ดาวน์โหลดและติดตั้ง Python

  2. ดาวน์โหลดBinaryCookieReader.py

  3. เรียกใช้ "Python BinaryCookieReader.py" บนเทอร์มินัล

ป้อนคำอธิบายภาพที่นี่

อย่างที่คุณเห็นบันทึกผลลัพธ์มีคำอธิบายคุกกี้โดยละเอียด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.