2017-07-26 91 views
0

我有一個Android應用程序,它通過REST APIs Web服務與服務器對話。我需要在android應用程序中應用會話管理。在服務器端,如果有15分鐘的非活動狀態,用戶將會註銷並生成一個新的身份驗證令牌。我想在我的android應用程序中執行會話管理。我正在使用Volley進行網絡通話。經過15分鐘的不活動(會話管理)後,從Android應用程序自動註銷

這樣做背後

原因:

我想申請會話管理,因爲後閒置超過15分鐘,服務器將產生一個新的令牌密鑰和無效的會話。然後,android應用程序需要由服務器生成新的令牌密鑰以進行身份​​驗證和成功的Web服務調用。

什麼我到現在會話管理在安卓

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

如前面的答案所述,您應該讓服務器(REST API)處理該問題。

從你的android應用程序的每個請求發送你有作爲標題的令牌(只是最佳實踐),並讓服務器在任何其他事情之前首先驗證該令牌。如果令牌不再有效,您可以讓他向您發送特殊的HTTP 401或其他HTTP代碼響應,告訴您會話超時。

在您的Android應用程序中,您必須處理此響應並自動啓動/重定向到登錄。一旦他登錄,一切都如常。

如果你想要的話,你可以嘗試記住用戶在被拋出之前的位置,並在他被再次授權後重新導回到該活動。

這裏是REST會話管理的一些資源:
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

3

就像你所說的,在你的服務器端,你應該有一個令牌和一個過期日期,你應該經常檢查每個用戶請求。令牌變爲無效如果日期過期並且用戶在開始新會話之前沒有更多響應(這樣,您可以重定向到登錄頁面,因爲服務器響應是'無效令牌'或'會話時間ellapsed')。

換句話說,簡單地說,如果會話已經過期,沒有人需要關注。只有當用戶發出新請求時,服務器纔會驗證用戶會話。它足夠安全。

1

您不必在android應用程序中使用任何會話管理,對於每個請求,您都必須在頭部參數中發送令牌,在服務器端更好地處理令牌認證,並在客戶端返回響應JSON - 您必須針對響應應用邏輯JSON

相關問題