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


97

쿠키가있는 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 2011 년

사용, 특정 서버에 대한 쿠키를 얻으려면 cookiesForURL대신 방법cookies
gyimi

3
이 방법은 앱을 종료 할 때까지만 쿠키를 삭제하기 때문에 실제로 작동하지 않습니다. 그러나 다시 열면 쿠키가 여전히 존재합니다.
Felipe Brahm

21

포인터 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;
}

확장 할 카테고리로 추가 할 수도 있습니다 NSHTTPCookieStorage. macdevelopertips.com/objective-c/objective-c-categories.html
Alex Reynolds

쿠키를 별도의 메소드로 표시하는 방법의 논리를 추출하는 +1! 작은 스 니펫이라도 도움이됩니다 !!
Guven

감사합니다! 오타가 있습니다. [cookie version]은 NSUInteger이므로 % d를 사용해야합니다.
Pavel Alexeev 2013

3

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"로 만듭니다 ...


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.