2017-07-26 17 views
0

後、私は、REST APIをウェブサービスを介してサーバーに話すのAndroidアプリケーションを持っています。私はアンドロイドアプリケーションでセッション管理を適用する必要があります。サーバー側で15分の非アクティブがある場合、ユーザーはログアウトし、新しい認証トークンが生成されます。私はアンドロイドアプリケーションでセッション管理を行いたいと思います。私はVolleyをネットワーク通話に使用しています。これを行うの背後に自動ログアウトは、非アクティブの15分(セッション経営管理論)

理由:

非アクティブの15分後にサーバーが新しいトークンキーを生成し、セッションが無効になりますので、私はセッション管理を適用したいです。次に、アンドロイドアプリケーションは、認証と成功したWebサービス呼び出しのためにサーバーによって生成された新しいトークンキーを持つ必要があります。私は、Androidでのセッション管理のために今まで持って何

マイMainActivityコード:

public class MainActivity extends AppCompatActivity { 

    public static final long DISCONNECT_TIMEOUT = 600000;// 15 min 

    private Handler disconnectHandler = new Handler() { 
     public void handleMessage(Message msg) { 
     } 
    }; 

    private Runnable disconnectCallback = new Runnable() { 
     @Override 
     public void run() { 
      // Perform any required operation for log out 
      Intent intent = new Intent(MainActivity.this, SecondActivity.class); 
      startActivity(intent); 
     } 
    }; 

    public void resetDisconnectTimer() { 
     disconnectHandler.removeCallbacks(disconnectCallback); 
     disconnectHandler.postDelayed(disconnectCallback, DISCONNECT_TIMEOUT); 
    } 

    public void stopDisconnectTimer() { 
     disconnectHandler.removeCallbacks(disconnectCallback); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public void onUserInteraction() { 
     resetDisconnectTimer(); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     resetDisconnectTimer(); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
     stopDisconnectTimer(); 
    } 
} 

セッションはサーバ側でタイムアウトにしているか、どのように私がログアウトすることができた場合にどのように確認することができますユーザーは15分間の非活動後に

答えて

1

に対するロジックを適用する必要が - 側。

あなたのアンドロイドアプリケーションからのすべてのリクエストに、あなたが持っているトークンをヘッダとして送信します(ベストプラクティス)。トークンがもう有効でない場合は、HTTP 401などの特別な応答を送信して、セッションがタイムアウトしたことを伝えることができます。あなたのAndroidアプリケーションで

あなたはこの応答を処理し、自動的に起動/ログインにリダイレクトする必要があります。彼がすべてログインしたらいつものように。あなたは、ユーザーが投げ出され得る前にあった場所を覚えて、彼は再び許可された後、そのアクティビティに戻ってリダイレクトするように試みることができますしたい場合は


https://www.quora.com/What-is-the-best-way-of-session-management-in-REST-architecture

If REST applications are supposed to be stateless, how do you manage sessions?

http://blog.synopse.info/post/2011/05/24/How-to-implement-RESTful-authentication

https://www.owasp.org/index.php/REST_Security_Cheat_Sheet

:ここ

は、RESTのセッション管理のためのいくつかの資源であります

3

あなたが言ったように、サーバー側では、トークンとあなたは常にすべてのユーザーの要求に応じて、チェックすべき有効期限を持っている必要があります。トークンが無効になる日付が期限切れになり、新しいセッションを開始するまで応答がない場合(この方法では、サーバーの応答が「無効なトークン」または「セッション時間ellapse」なのでログインページにリダイレクトできます)言い換えれば

は、単純な方法で、誰もセッションがすでに有効期限が切れている場合は見てする必要はありません。ユーザーが新しい要求を行った場合にのみ、サーバーはユーザーセッションを検証します。それは十分に安全です。

1

アンドロイドアプリケーションでセッション管理を使用する必要はありません。ヘッダーパラメータ内でトークンを送信する必要があるたびに、サーバー側でトークン認証が行われ、応答JSONがクライアント側で返されますあなたは以前の回答では、サーバー(REST API)がこれを処理させるべきで述べたように応答JSON

関連する問題