Android开发中 如何保持登陆状态

以前多iOS开发没遇到过session保持的问题,第一次作安卓项目,组长说和iOS同样,瞬间蒙圈啦,session保持是什么。。。cookie

session:通俗点说就是网络请求中的会话建立保持的一种服务端机制。网络

cookie:服务端给每一个session分配一个惟一的JSESSIONID,经过cookie给客户端;session

session和cookie都是为了用来保存状态信息的。一个用于服务端一个用于客户端;框架

解决:ide

1.在客户端发送登陆请求后,将response中的cookie取出保存在本地全局变量;工具

call.enqueue(new Callback<MyDataModel>() {
    @Override
    public void onResponse(Call<MyDataModel> call, Response<MyDataModel> response) {

        System.out.println("_____________成功" + response.body().getData());

        SessionUtilTools.getSession(response.headers());// 获取响应中的cookie
        SharedData.isFirst = true;
        Intent intent = new Intent();
        intent.setClass(MainActivity.this,TabBarActivity.class);
        startActivity(intent);
        finish();
    }

    @Override
    public void onFailure(Call<MyDataModel> call, Throwable t) {
        System.out.println("___________1失败" + t);
    }
});

session 工具类(用于取cookie)ui

public class SessionUtilTools {
    public static void getSession(Headers headers){

        List<String> cookies = headers.values("Set-Cookie");
        String session = cookies.get(0);
        SharedData.sessionCookie = session.substring(0,session.indexOf(";"));// 取出cookie 保存在全局变量中
    }
}

2.每次请求的时候将cookie带上 this

public class TokenInterceptor implements Interceptor{  //自定义拦截器
    @Override
    public Response intercept(Chain chain) throws IOException {

           Request newRequest = chain.request()
                   .newBuilder()
                   .addHeader("cookie",SharedData.sessionCookie)//在请求中添加登陆后获取的cookie
                   .build();

            Response response =chain.proceed(newRequest);

        return response;
    }
}
//网络请求框架
private static OkHttpClient getClient(){
    if (client==null)//将自定义的拦截器添加
        client = new OkHttpClient().newBuilder().addInterceptor(new TokenInterceptor()).build();
    return client;
}

这样就解决了登陆保持的问题;spa

相关文章
相关标签/搜索