UIWebViewのCookieはどこに保存されますか?


97

Cookieを使用してiPhoneアプリを作成しています。Safari設定でCookieを削除しても、Cookieは削除されません。どこに保管されていますか?別のUIWebViewから読み取ることはできますか?

ありがとう!

回答:


171

アプリケーションの[NSHTTPCookieStorage sharedHTTPCookieStorage]コンテナには独自の「cookie jar」があります。

アプリケーションのCookie jarのCookieを簡単に確認する方法は次のとおりです。

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

フィルタリングと操作にはいくつかの方法があります。見てくださいNSHTTPCookieStorageのクッキーにアクセスするためのドキュメント、およびNSHTTPCookieの個々のクッキーのプロパティにアクセスするためのマニュアルを参照して。


1
それは面白い。そんなものが存在するなんて知らなかった。指摘してくれてありがとう。
ブラッド・ラーソン

ありがとう、アレックス!まさに私が探していたもの。
ドット

それは素晴らしいことです!特定のサーバーの特定のCookieをログに記録するにはどうすればよいですか?
Lior Frenkel、2011年

特定のサーバーのクッキーを取得するには、使用してcookiesForURL代わりにする方法をcookies
gyimi

3
この方法は、アプリを終了するまでCookieを削除するだけなので、実際には機能しません。ただし、再度開くと、Cookieはそのまま残ります。
フェリペブラーム

21

ポインタアレックスをありがとう!これに追加するには、アレックスの例を使用して作成した「クッキーダンパー」をドロップします。多分これは誰かを助けるでしょう。

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

これを拡張するカテゴリとして追加することもできます。macdevelopertips.comNSHTTPCookieStorage / objective
Alex Reynolds

Cookieを別のメソッドに表示する方法のロジックを抽出するための+1!そのような小さなスニペットでも、それは役立ちます!!
Guven

ありがとうございました!タイプミスがあります:[cookie version]はNSUIntegerなので、%dを使用する必要があります。
Pavel Alexeev

3

アレックスは、これをカテゴリに入れることについて素晴らしいアイデアを持っていました。これが私が最終的に使用したものです:

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.binarycookiesを直接開くことはできません。スクリプトを実行できます。

  1. Pythonをダウンロードしてインストールする

  2. BinaryCookieReader.pyをダウンロード

  3. ターミナルで「Python BinaryCookieReader.py」を実行します

ここに画像の説明を入力してください

ご覧のとおり、出力ログには詳細なCookieの説明が含まれています

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.