問題

私はiOS開発の新機能です。セッション情報を管理するためにNSURLSessionを使用しています。以下は、サーバーAPIを呼び出すために使用するサンプルコードです。

 NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request
                                                             completionHandler:^(NSData *data,
                                                                                 NSURLResponse *response,
                                                                                 NSError *error)
{ }];
 

私のアプリケーションの流れは、ログインしていない場合 - >ログイン(ログインAPIを呼び出す) それ以外の場合はホーム画面に移動し、他のAPIを呼び出します。

ここでの私の問題は、アプリケーションがメモリから削除されると、セッション情報が維持されず、ログインを再度呼び出す必要があることです。私の要件はFacebookのようなもので、ユーザーは一度だけログインしなければならず、次のアプリの起動中にセッションが維持されます。

編集: これらのリクエストにCookieを取得して設定することで、これを処理する必要があると思います。私はこれを検索しましたが、適切なサンプルは見つかりませんでした。誰も私の問題に関するいくつかの良いサンプルで私を助けてください。

ありがとう!

  ベストアンサー

私は最終的に、複数の投稿からの回答を混在させることによって解決策を見つけました。誰かが次の方法でより良いアプローチや修正を知っているなら、それを投稿してください。

ログインAPIを呼び出すと、次のことが行われます。

 NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request
                                                             completionHandler:^(NSData *data,
                                                                                 NSURLResponse *response,
                                                                                 NSError *error)
{
    NSHTTPURLResponse *httpResp = (NSHTTPURLResponse*) response;

    NSArray *cookies = [NSHTTPCookie cookiesWithResponseHeaderFields:[httpResp allHeaderFields] forURL:[response URL]];
    [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookies:cookies forURL:[response URL] mainDocumentURL:nil];
    for (NSHTTPCookie *cookie in cookies) {
        NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];
        [cookieProperties setObject:cookie.name forKey:NSHTTPCookieName];
        [cookieProperties setObject:cookie.value forKey:NSHTTPCookieValue];
        [cookieProperties setObject:cookie.domain forKey:NSHTTPCookieDomain];
        [cookieProperties setObject:cookie.path forKey:NSHTTPCookiePath];
        [cookieProperties setObject:[NSNumber numberWithInt:cookie.version] forKey:NSHTTPCookieVersion];

        [cookieProperties setObject:[[NSDate date] dateByAddingTimeInterval:31536000] forKey:NSHTTPCookieExpires];

        NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
        [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
        NSLog(@"name:%@ value:%@", cookie.name, cookie.value);
    }
}];
 

ここで最も重要な部分は "dateByAddingTimeInterval:31536000"です。これは秒単位でクッキーの有効期限を設定します。これが設定されていない場合、セッションは1回だけ使用するために維持されます。

最後にログアウトすると、すべてのクッキーをクリアします。

 NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *each in cookieStorage.cookies) {
    [cookieStorage deleteCookie:each];
}
 

  同じタグがついた質問を見る

ioscookiesnsurlsession