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

相關文章
相關標籤/搜索