2011-01-04 14 views
50

iOSアプリケーションでNSHTTPCookieStorageを使用してURLから取得したCookieを管理する予定です。アプリケーションの実行時にCookieを管理することを理解しています。しかし、アプリケーション終了後にクッキーを保持することが可能かどうかは疑問でした。そして、アプリが再び開かれたら、それらのクッキーをもう一度読んでください。 NSHTTPCookieStorageはアプリケーション間でクッキーを使用していますか?または、アプリケーションランタイムの間だけ?これらのCookieを保持するには、CoreDataを使用する必要がありますか?iOSアプリケーションでのCookieの永続化

答えて

44

アプリが読み込まれたときにCookieを再設定する必要があります。私はこのようなコードを使用しています:

NSData *cookiesdata = [[NSUserDefaults standardUserDefaults] objectForKey:@"MySavedCookies"]; 
if([cookiesdata length]) { 
    NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData:cookiesdata]; 
    NSHTTPCookie *cookie; 

    for (cookie in cookies) { 
     [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie]; 
    } 
} 

これはうまく動作します。

+2

「MySavedCookies」は既にそこにありますか?それとも、私のアプリが非アクティブになるのを待たなければならないのですか? – Alex

+1

あなたは自分でそれを保存する必要があります - それは私が私のものを保存する場所です。 – Magnus

+3

ユーザーのデフォルトでクッキーを保存することは、iFunBoxなどのツールを使ってすべてのplistにアクセスできるため、セキュリティ上の欠陥になる可能性があります。 これらは暗号化する必要がありますが、最良の動作は@gazreeseの回答に従うことです。 –

103

他の回答に示唆されているように、クッキーを自分自身で維持する必要はありません。 NSHTTPCookieStorageはあなたのためにクッキーを保持しますが、クッキーの有効期限がサーバ側で設定されていることを確認する必要があります。

有効期限のないCookieは「セッションのみ」とみなされ、アプリを再起動すると消去されます。 「セッションのみ」の状況は、BOOLプロパティNSHTTPCookieで確認できます。これは標準的なCookieであり、iOS固有のものではありません。

+0

この明快さを探しています、ありがとう。興味深いことに、アプリが再起動されるとクリアされます。デスクトップ上でChromeを再起動してもセッションを開いておくことができます。 – Dan2552

+0

+1なぜ私のクッキーがもうそこにないのか理解しています:)。ありがとう!! – Niko

+0

あなたは私に多くの時間を救った!ありがとう! –

関連する問題