UIWebView çerezleri nerede saklanır?


96

Çerezlerle bir iPhone uygulaması oluşturuyorum. Safari ayarlarında çerezleri silmek onları silmez. Nerede saklanıyorlar? Bunları başka bir UIWebView'dan okumak mümkün mü?

Teşekkürler!

Yanıtlar:


171

Uygulamanızın [NSHTTPCookieStorage sharedHTTPCookieStorage]kapsayıcıda kendi "çerez kavanozu" vardır .

İşte uygulamanızın çerez kavanozundaki çerezlere nasıl hızlı bir şekilde bakabilirsiniz:

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

Filtreleme ve manipülasyon için çeşitli yöntemler mevcuttur. Bir göz atın NSHTTPCookieStorage erişen kurabiye belgelerine ve NSHTTPCookie bireysel tanımlama özelliklerine erişim için belgeleri.


1
İlginç. Böyle bir şeyin var olduğunu bilmiyordum. Gösterdiğiniz için teşekkürler.
Brad Larson

Teşekkürler Alex! Tam olarak aradığım şey.
nokta

Bu harika! Belirli bir sunucu için belirli bir tanımlama bilgisini nasıl kaydederim?
Lior Frenkel

Belirli bir sunucu için tanımlama bilgileri almak için, cookiesForURLbunun yerine yöntemi kullanıncookies
gyimi

3
Bu yöntem gerçekten işe yaramaz çünkü bu, yalnızca siz uygulamadan çıkana kadar çerezleri silecektir. Ancak onu yeniden açtığınızda çerezler hala orada olacaktır.
Felipe Brahm

21

İşaretçi Alex için teşekkürler! Buna eklemek için, Alex'in örneğini kullanarak oluşturduğum "çerez damper" i yazacağım. Belki bu başka birine yardımcı olur.

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

Bunu genişletmek için bir kategori olarak bile ekleyebilirsiniz NSHTTPCookieStorage: macdevelopertips.com/objective-c/objective-c-categories.html
Alex Reynolds

Bir çerezin nasıl ayrı bir yöntemde gösterileceğinin mantığını çıkarmak için +1! Böylesine küçük bir parça için bile yardımcı olur !!
Guven

Teşekkür ederim! Bir yazım hatası var: [çerez sürümü] NSUInteger'dır, bu nedenle% d kullanılmalıdır.
Pavel Alexeev

3

Alex'in bunu bir kategoriye koyma konusunda harika bir fikri vardı. İşte kullandığım şey:

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

Çıkışı biraz daha "JSON-y" yapar ...


1

içinde sandbox:Library->Cookies->Cookies.binarycookies ancak .binarycookiee-postaları doğrudan açamazsınız, bir komut dosyası çalıştırabilirsiniz:

  1. Python'u indirin ve yükleyin

  2. BinaryCookieReader.py'yi indirin

  3. Terminalde "Python BinaryCookieReader.py" çalıştırın

görüntü açıklamasını buraya girin

Gördüğünüz gibi, çıktı günlüğü ayrıntılı tanımlama bilgilerini içerir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.