Android混合開發模式下Cookies的管理

Android混合開發無論是使用的哪一種hybird框架都是基於WebView實現的,因此咱們須要在原生頁面拿到服務器返回的cookies的時候將其同步到WebView中,同時在原生頁面調用服務器api以前,從WebView_cookies.db中拿到最新的cookies寫入http請求頭當中,只有這樣才能保持用戶的登陸狀態,不然服務器檢測到cookies中的sessionId過時後會返回錯誤碼提示用戶登陸失效。以okhttp網絡框架爲例,經過寫兩個攔截器分別在發送http請求的時候獲取本地cookies寫到http header當中,在接收http響應的時候從響應頭中拿到最新的cookies並刷新本地cookies:api

public class AddCookieInterceptor implements Interceptor {
    @Override
    public Response intercept(Chain chain) throws IOException {
        final Context context = PApplication.getInstance();
        String cookies = Commons.getSSOCookie(context);
        Request.Builder builder = chain.request().newBuilder();
        if (EmptyHelper.isNotEmptyOrNotNull(cookies)) {
            Request newRequest = builder.addHeader("Cookie", cookies).build();
            return chain.proceed(newRequest);
        }
    }
}
複製代碼
public class ReceivedCookieInterceptor implements Interceptor{

    @Override
    public Response intercept(Chain chain) throws IOException {
        Response originalResponse = chain.proceed(chain.request());
        List<String> cookies = originalResponse.headers("Set-Cookie");
        if (!cookies.isEmpty()) {
            CookieManager cookieManager = CookieManager.getInstance();
            cookieManager.setAcceptCookie(true);// 容許接受 Cookie
            String domain = HeadDomin();
            for(String cookie : cookies){
                cookieManager.setCookie(domain,cookie);
            }
            cookieManager.flush();
        }
        return originalResponse;
    }
}
複製代碼
相關文章
相關標籤/搜索