9

In:この質問AFNetworkingでは、バックグラウンドで Cookie が自動的に処理されると言われていますが、の質問で、ログイン時に php で作成されたサーバーでセッションを維持するのに問題がありました。閉じたら (デバッグを停止します) Xcode で) アプリがセッションに戻り、なくなっていました。答えは、問題を解決するために Cookie を永続化することでした。

NSData *cookiesData = [[NSUserDefaults standardUserDefaults] objectForKey:@"User"];
if ([cookiesData length] > 0) {
     for (NSHTTPCookie *cookie in [NSKeyedUnarchiver cookiesData]) {
           [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
      }
}

このようなことをしようとすると、アプリがクラッシュします。ログインすると、次のように NSUserDefault を設定します。

[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"User"];
//Then synthesize

この使い方はまずいのでしょうか?NSHTTPCookieStorage も私の問題ですか? ありがとう。

4

1 に答える 1

37

以下を使用してください。これは、私のために機能しているCookieを保存およびロードする正しい方法です。

- (void)saveCookies{

    NSData *cookiesData = [NSKeyedArchiver archivedDataWithRootObject: [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]];
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject: cookiesData forKey: @"sessionCookies"];
    [defaults synchronize];

}

- (void)loadCookies{

    NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData: [[NSUserDefaults standardUserDefaults] objectForKey: @"sessionCookies"]];
    NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];

    for (NSHTTPCookie *cookie in cookies){
        [cookieStorage setCookie: cookie];
    }

}

それが役に立てば幸い!

于 2013-01-18T19:03:18.940 に答える