[iphone] UIWebView의 쿠키는 어디에 저장됩니까?

쿠키가있는 iPhone 앱을 만들고 있습니다. Safari 설정에서 쿠키를 삭제해도 쿠키가 삭제되지는 않습니다. 어디에 저장됩니까? 다른 UIWebView에서 읽을 수 있습니까?

감사!



답변

애플리케이션에는 [NSHTTPCookieStorage sharedHTTPCookieStorage]컨테이너 에 자체 “쿠키 항아리”가 있습니다.

애플리케이션의 쿠키 항아리에있는 쿠키를 빠르게 살펴 보는 방법은 다음과 같습니다.

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

필터링 및 조작에 여러 가지 방법을 사용할 수 있습니다. 상기 살펴보세요 NSHTTPCookieStorage의 접근 쿠키에 대한 설명서 및 NSHTTPCookie의 개별 쿠키의 속성에 액세스하기위한 문서를.


답변

포인터 Alex에게 감사드립니다! 여기에 추가하기 위해 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;
}


답변

Alex는 이것을 카테고리에 넣는 것에 대해 좋은 아이디어를 가지고있었습니다. 내가 사용한 결과는 다음과 같습니다.

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

출력을 좀 더 “JSON-y”로 만듭니다 …


답변

에서 직접 sandbox:Library->Cookies->Cookies.binarycookies
열 수 는 없지만 .binarycookie스크립트를 실행할 수 있습니다.

  1. Python 다운로드 및 설치

  2. BinaryCookieReader.py 다운로드

  3. 터미널에서 “Python BinaryCookieReader.py”실행

여기에 이미지 설명 입력

보시다시피 출력 로그에는 자세한 쿠키 설명이 포함되어 있습니다.


답변