1

私のiPhoneアプリでは、AFNetworkingを使用してPHPAPIにHTTPリクエストを送信しています。

アプリを開くたびにログインする必要があり、サーバーがセッションを開始します。ログイン後、APIにHTTPリクエストを送信するたびに、APIはセッションがあることを認識し、APIのすべての機能を使用できるようにします。

問題は、アプリを閉じた後、セッションが破壊され、APIの機能を再ログインせずに使用できないと思うことです。

ここでは、AFNetworkingを使用してHTTPリクエストを行うiPhoneアプリについて話しています。私のテストから、アプリを閉じた後にセッションが破棄されることがわかりました。

これが本当かどうか知りたいし、認証システムを作る最良の方法を知りたい。アプリを閉じるとセッションが破棄されるため、セッションはもはや解決策ではないと思います。私の代替案は、誰かがログインしてトークンをアプリに保存するたびにauth_tokenを作成し、誰かがアプリを開くたびに、最初のhttpリクエストにauth_tokenが含まれるようにし、そのトークンがデータベースのトークンと一致する場合です。 、次に通常どおりセッションを初期化します。アプリを開くたびに、クライアントとサーバー間の接続を初期化するためにHTTPSリクエストを行う必要がある場合、これは少し遅くなる可能性があると思います。

つまり、問題は次のとおりです。アプリを閉じた後もセッションを存続させることができるというのは本当ですか?それは私の代替案ですか?

4

2 に答える 2

1

これが私の質問の解決策です。AFNetworkingを使用している場合、アプリを閉じるとCookieが削除されます。したがって、これを修正するには、ユーザーのデフォルトでCookieを保存し、アプリが開いているときにCookieを読み込むことができます。

クッキーを保存します(最初にクッキーの名前を確認する必要があります。不要なクッキーを保存したくないので、私のものはPHPSESSIDでした):

    NSArray * all = [NSHTTPCookie cookiesWithResponseHeaderFields:[self.response allHeaderFields] forURL:[NSURL URLWithString:@"http://link.to.api" ]];
    for (NSHTTPCookie *cookie in all)
    {
        if([cookie.name compare:@"PHPSESSID"] == NSOrderedSame)
        {
            NSData *data = [NSKeyedArchiver archivedDataWithRootObject:cookie];
            [[NSUserDefaults standardUserDefaults] setObject:data forKey:@"MySavedCookies"];
            [[NSUserDefaults standardUserDefaults] synchronize];
        }
    }

次に、「application didFinishLaunchingWithOptions」でアプリをロードすると、次のようになります。

  NSData *cookiesdata = [[NSUserDefaults standardUserDefaults] objectForKey:@"MySavedCookies"];
  if([cookiesdata length])
  {
     NSHTTPCookie *cookie = [NSKeyedUnarchiver unarchiveObjectWithData:cookiesdata];
    [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
  }
于 2013-01-27T11:18:38.977 に答える
0
NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL: networkServerAddress];
for (NSHTTPCookie *cookie in cookies) 
{
    [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
}
于 2013-01-12T15:04:58.953 に答える