Je crée une application iPhone avec des cookies. La suppression des cookies dans les paramètres de Safari ne les supprime pas. Où sont-ils stockés? Est-il possible de les lire à partir d'un autre UIWebView?
Merci!
Réponses:
Votre application a son propre "pot à cookies" dans le [NSHTTPCookieStorage sharedHTTPCookieStorage]conteneur.
Voici comment vous pouvez jeter un coup d'œil aux cookies dans le pot à cookies de votre application:
NSHTTPCookie *cookie;
NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [cookieJar cookies]) {
   NSLog(@"%@", cookie);
}Plusieurs méthodes sont disponibles pour le filtrage et la manipulation. Jetez un oeil à la NSHTTPCookieStorage documentation pour l' accès aux cookies et la NSHTTPCookie documentation pour l' accès aux propriétés des cookies individuels.
cookiesForURLméthode à la place decookies
                    Merci pour le pointeur Alex! Pour ajouter à cela, je vais déposer mon "cookie dumper" que j'ai créé en utilisant l'exemple d'Alex. Peut-être que cela aidera quelqu'un d'autre.
- (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 a eu une excellente idée de mettre cela dans une catégorie. Voici ce que j'ai fini par utiliser:
NSHTTPCookieStorage + Info.h
#import <Foundation/Foundation.h>
@interface NSHTTPCookieStorage (Info)
+ (NSDictionary*) describeCookies;
+ (NSDictionary *) describeCookie:(NSHTTPCookie *)cookie;
@endNSHTTPCookieStorage.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]) };
}
@endRend la sortie un peu plus "JSON-y" ...
dans , sandbox:Library->Cookies->Cookies.binarycookies
mais vous ne pouvez pas ouvrir le .binarycookies directement, vous pouvez exécuter un script:
Téléchargez et installez Python
Télécharger BinaryCookieReader.py
Exécutez "Python BinaryCookieReader.py" sur le terminal
comme vous pouvez le voir, le journal de sortie contient une description détaillée des cookies