初めてアプリを起動してログインすると、セッションが発生します。このセッションで、いくつかのクエリを実行する必要があります(これにより、誰がログインしているかを知ることができます)。
とにかく、アプリを強制終了して再起動すると、新しいセッションIDが取得されます。なんで?以前、私のiOSアプリはセッションCookieを保存していました。
初めてアプリを起動してログインすると、セッションが発生します。このセッションで、いくつかのクエリを実行する必要があります(これにより、誰がログインしているかを知ることができます)。
とにかく、アプリを強制終了して再起動すると、新しいセッションIDが取得されます。なんで?以前、私のiOSアプリはセッションCookieを保存していました。
次のように、アプリが終了する前に手動でCookieをディスクに保持しNSCoding
、アプリの起動時にCookieを読み込む必要があります。
NSData *cookiesData = [[NSUserDefaults standardUserDefaults] objectForKey:@"SavedCookies"];
if ([cookiesData length] > 0) {
for (NSHTTPCookie *cookie in [NSKeyedUnarchiver unarchiveObjectWithData:cookiesData]) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
}
}
HTTPセッションは、短命になるように設計されています。通常、これはブラウザの寿命、または最近ではブラウザタブの寿命に設定されます。一部のブラウザは、ブラウザタブが開いたままである限り、アプリの起動間のセッションを保存するようになりましたが、これはユーザーにとって便利です。
以前のアプリがアプリの開始と終了の間にセッションを維持していた場合、それはセッションの保存方法に関する実装のバグでした。
長期間有効なデータを保存するためにセッションを使用することはお勧めしません。そのためには、NSUserDefaults
SqlLiteストレージを使用するか使用を検討してください。
コメントの質問に対処するために編集:
アプリのインストール時にユーザーが1回だけログインする必要があるように、アプリを作成するにはどうすればよいですか。
これを実現するには、システムのどの部分を所有しているかに応じて、いくつかの方法があります。
概念的に最も簡単なシナリオは、Webサービスを所有していることです。この場合、ユーザーの資格情報を保存できます。アプリを起動するたびに、ユーザーにログインして、現在のセッションIDを使用します。
このためのUIを構築するとき、ユーザーに私を覚えてもらうように求めるチェックボックスがあります。基本的に、電話にクレジットを保存する許可を求めます。
秘訣は、ユーザーの資格情報を適切に保護する方法です。