在15分钟不活动后自动从Android应用程序注销(会话管理)

时间:2017-07-26 11:02:09

标签: android

我有一个Android应用程序,它通过REST API Web服务与服务器通信。我需要在android应用程序中应用会话管理。在服务器端,如果有15分钟不活动,用户将被注销并生成新的身份验证令牌。我想在我的Android应用程序中进行会话管理。我正在使用Volley进行网络通话。

执行此操作后的原因:

我想应用会话管理,因为在15分钟不活动后,服务器将生成新的令牌密钥并使会话无效。然后,android应用程序需要使用服务器生成的新令牌密钥进行身份验证和成功的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分钟不活动后注销用户。

3 个答案:

答案 0 :(得分:3)

就像你说的那样,在你的服务器端,你应该有一个令牌和一个到期日,你应该在每个用户请求上检查它们。令牌变为无效如果日期已过期,用户将无法获得更多响应,直到开始新会话(这样,您可以重定向到登录页面,因为服务器响应是“无效令牌”或“会话时间已删除” #39;)

换句话说,简单来说,没有人需要观看会话是否已经过期。只有当用户发出新请求时,服务器才会验证用户会话。它足够安全。

答案 1 :(得分:1)

你不必在android应用程序中使用任何会话管理,更好的是你必须在头部参数内发送令牌的每个请求,在服务器端,令牌认证都要小心并在客户端返回响应JSON-你必须对响应JSON

应用逻辑

答案 2 :(得分:1)

如前面的Answers所述,你应该让服务器(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