Ç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:
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.
cookiesForURL
bunun yerine yöntemi kullanıncookies
İş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;
}
NSHTTPCookieStorage
: macdevelopertips.com/objective-c/objective-c-categories.html
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 ...
içinde sandbox:Library->Cookies->Cookies.binarycookies
ancak .binarycookie
e-postaları doğrudan açamazsınız, bir komut dosyası çalıştırabilirsiniz:
Python'u indirin ve yükleyin
BinaryCookieReader.py'yi indirin
Terminalde "Python BinaryCookieReader.py" çalıştırın
Gördüğünüz gibi, çıktı günlüğü ayrıntılı tanımlama bilgilerini içerir