2016-05-31 8 views
0

私の主な質問は、サーバーにログアウト要求を送信できるように、バックグラウンド(停止中)にあったときのエンドユーザーによるアプリケーション終了を検出する方法です。Objective-C - アプリが終了したときにセッションIDを再利用するのを防ぐには?

セッションを終了するためのタイムアウト間隔はすでにサーバーにありますが、間隔が5分であると仮定すると、ユーザーがアプリケーションを終了して5分後にセッションが有効になり、誰でもデータを再利用してください。

注:

  • 私たちは、HTTPS接続とSSL証明書ピニングを使用しています。

  • また、一定間隔ごとにクライアントアプリケーションによって呼び出されるハートビートWebサービスを実装して、この間隔でセッションを有効にしておくように指示しました。このWebサービスが特定のセッションを呼び出さなかった場合、このセッション。

+0

何盗聴や再利用は、あなたが想像している、そしてどのようにこれが出てすぐにアプリが終了したときに、ユーザをログインすることで軽減されますか? – Wain

+0

私がサーバーにログアウトを送信すると、サーバーはこのセッションを終了し、誰もそれを使用できなくなります。 ユーザーがアプリケーションを終了する前にログアウトしなかった場合とは異なり、セッションは有効になり、誰でもネットワーク上の要求/応答をキャッチしてこのセッションIDを再利用できます。 –

+0

'誰でもリクエスト/レスポンスを捕まえることができます' - どのように?あなたはHTTPSと固定を使用していると言っているので、ログアウトで保護しようとしているベクターは何ですか? – Wain

答えて

1

あなたのアプリが一時停止されると、あなたが解約される前にそれ以上の通知はありません。あなたが望むことをする方法はありません。

Plusは、ユーザーが何かを行うには、あなたのアプリを一時停止(のようなゲームをプレイ)し、その後日間にアプリに戻ることができませんでした。

あなたはユーザーがアプリを離れるときにログアウトしたい場合は、willBeSuspendedメッセージでそれを行います。より多くの背景時間を求め、すぐにログアウトを送信してください。ここで

+0

I don 'アプリがバックグラウンドになったらログアウトしたくない。 –

+1

あなたのアプリは一時停止された時点で終了することを知る方法がありません。停止状態から終了したときにシステムに通知することはありません。したがって、あなたが求めていることをすることはできません。 –

1

モハメド・アメール、

はQuickblox Serverで使用されるアプローチであり、それはわずかなオーバーヘッドを必要とするけれども、私はそのほとんど固体感じます。

クライアントアプリケーション(iOS androidのいずれか)がquickbloxサーバーとのセッションを確立すると、quickbloxサーバーは定期的な間隔の後にクライアントアプリケーションがサーバーにプレゼンス情報を送信することを期待します。

プレゼンス情報の送信はかなり簡単です。彼らは私たちが持っているセッションIDで5分の間隔のあいだに私たちが打ち続けるapiを書いています。彼らはセッションIDを検証し、有効であることが判明すると、そのIDに関連付けられたユーザーの有効期限を5分以上延長します。彼らは最後のヒット時間を維持している場合、要求時間は5分の時間枠内であれば、彼らがチェックし、すべてのsubsequesnt要求のため:彼らは私が、こと

アプローチ1であると考えているんだろう何

はい、単にそれを処理します。リクエストが5分後に到着した場合、ユーザーのセッションIDが削除され、セッションがタイムアウトしたと応答します。

アプローチ2:彼らはオンライン提供しているためだけでなく、彼らは単に彼らはおそらく持つエントリを検索し、DB上でスワイプバックグラウンドスレッドを作成するようにサーバーからセッションIDを削除するには、着信要求に依存カントオフライン情報最後のヒット時間は5分以上になり、DBから削除されます。ユーザーセッションが期限切れになったことを宣言します。これは、クライアントが継続的にサーバーをヒットアプリ伴い、情報をpresenseするチャットアプリケーションなどのアプリケーションのためのサーバーの負担を増大させますが

は、このオーバーヘッドは、まだ私は信じて結構ですので、非常に重要です。

希望、私はいくつかのアイデアをご提供しています少なくとも:)

+0

私たちは既にこのアプローチも持っています(私はそれを言い忘れました:()。例えば、5分ごとに呼ばれるWebサービスがあり、このセッションIDを別の5分間稼働させておくようにサーバーに指示しています しかし、ユーザーはこのアプリケーションを閉じて、誰かがこのセッションIDを取得して使用することができます。また、このWebサービスを呼び出して、このセッションIDを生きているサーバーに伝えます。 –

+0

@ mohamed-amer:誰でもセッションIDを取得できますか?あなたのセッションIDは、プレーンなランダムなテキストであり、他の人のために同じであるかもしれないということを意味していますか?次に、セッションIDジェネレータを扱う必要があります。誰か他の人にハッキングやセッションを取得するこの問題にログインしている誰かのIDはすべてのシステムに存在しますが、ハッキングして誰かのセッションIDを取得するのは簡単ではありません:) –

関連する問題