OkHttp3中默認不保持Cookie的解決方法
OKhttp3中的cookies
OkHttpClient client = new OkHttpClient().newBuilder().cookieJar(new CookieJar() {
private final HashMap<String, List<Cookie>> cookieStore = new HashMap<>();
@Override
public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
cookieStore.put(url.host(), cookies);
}
@Override
public List<Cookie> loadForRequest(HttpUrl url) {
List<Cookie> cookies = cookieStore.get(url.host());
return cookies != null ? cookies : new ArrayList<Cookie>();
}
}).build();
主要就是實現(xiàn)CookieJar接口,在OkHttpClient構建的時候。
OkHttp3 默認不保持 Cookie 的解決方案
OkHttp3 聲明的 OkHttpClient 默認不保存 Cookie,不發(fā)送 Cookie。在實際開發(fā)中會丟失 Session ID 造成服務器無法判斷當前用戶的登錄狀態(tài)。查閱多方資料后給出解決辦法。
三點概念:
首次與服務器建立連接時,服務器生成 SessionID 標記當前連接會話。(HTTP 是無連接協(xié)議)
客戶端 request 時,將 帶有 SessionID 的 Cookie 發(fā)送至服務器,以此作為會話標記。
在實際使用 OkHttp3 時,通常一個 Application 只使用 一個 OkHttpClient 實例進行連接。
解決方案:
構建 CookieJar 對象,并重寫 saveFromResponse 和 loadFromRequest 方法。
使用構建了 CookieJar 的 OkHttpClient 實例收發(fā) Http 連接。
本程序中使用了單例模式構造 OkHttpClient 實例,Cookie 持久化代碼如下:
mOkHttpClient = new OkHttpClient.Builder()
.cookieJar(new CookieJar() {
private final HashMap<String, List<Cookie>> cookieStore = new HashMap<>();
@Override
public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
cookieStore.put(url.host(), cookies);
}
@Override
public List<Cookie> loadForRequest(HttpUrl url) {
List<Cookie> cookies = cookieStore.get(url.host());
return cookies != null ? cookies : new ArrayList<Cookie>();
}
}).build();
總結
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關文章
Android 7.0調(diào)用相機崩潰詳解及解決辦法
這篇文章主要介紹了 Android 7.0調(diào)用相機崩潰詳解及解決辦法的相關資料,需要的朋友可以參考下2016-12-12
Android編程之listView中checkbox用法實例分析
這篇文章主要介紹了Android編程之listView中checkbox用法,結合實例形式分析了Android中checkbox的頁面布局及功能實現(xiàn)相關技巧,需要的朋友可以參考下2016-01-01
android播放視頻時在立體聲與單聲道之間切換無變化原因分析及解決
使用第三方視頻播放器,有立體聲與單聲道之間切換,發(fā)現(xiàn)切換后無作用,原因是由于在HAL層默認沒有處理上層發(fā)的stereo 轉mono的命令,具體的解決方法如下2013-06-06

