1

私たちの API は、セッションの有効期限 (30 分間の非アクティブ状態) を持つユーザー認証コードを返します。したがって、認証トークンを使用して API 呼び出しを行うと、セッションは呼び出し時から 30 分に更新されます。

非アクティブ状態が 30 分間続くと、API はトークンの有効期限が切れたことを示すエラーを返します。この時点で、新しい認証トークンをリクエストする必要があります。

ただし、これを行うための明白な方法 (ユーザーにログイン画面を表示し、再度ログインさせる) は、アプリの一部の機能の途中でユーザーを切断することを意味します。

たとえば、プロセスの最後に 1 つの API 呼び出し全体を集約して送信するオプションと入力を備えたさまざまなビュー コントローラーがあります。ユーザーがこれらの入力とビューに入力している間にサーバーでセッションが期限切れになると、API 呼び出しが行われたときにログアウトされ、これらのビューでの進行状況が失われます。

これには 2 つの回避策があります。

  1. アプリでタイマーを設定して、アプリで 30 分間非アクティブになった後にユーザーが確実にログアウトされるようにします。これは、一連の入力中にログアウトされないことを意味しますが、これにより問題が発生します。独自のタイマーを実行している場合でも、サーバー API の有効期限が切れる可能性があります。したがって、これは機能しません。

  2. 約 10 秒ごとにサーバーにポーリングして、API 認証トークンがまだ有効かどうかを尋ねます。これは、バッテリー、データ、およびあらゆる種類のものを消費します。このようなことを行うための合理的な方法ではありません。

誰にもアイデアはありますか?

ありがとうトム

4

1 に答える 1

1

あなたの説明からすると、典型的な失敗したトランザクションの問題のように思えます。トランザクション処理に慣れていない場合に備えて、「トランザクション処理の基本」はこのトピックの入門書です。

バックエンド システムを変更できる場合は、ACID バックエンドを確保する必要があります。

これは、クライアントでデータを構築し、トランザクションが完了するまでデータをサーバーに送信しないことを意味する場合があります。そうすれば、セッションがタイムアウトした場合でも、クライアントはトランザクションを完了するために必要なすべてのデータを保持しています。(原子性を活用)

これは、トランザクション トークンを持つことを意味する場合があります。新しいセッションが作成されると、クライアントはサーバーにトランザクション トークンを送信でき、新しいセッション内でトランザクションの状態が復元されます。(耐久力を活かす)

私にとって、これらのオプションは両方とも、既存のトランザクションを一掃して、ユーザーに最初からやり直すことを強制するよりも優れています。

それが役立つことを願っています。

于 2012-11-21T14:59:35.360 に答える