您好,登錄后才能下訂單哦!
這篇文章主要介紹了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();
主要就是實現CookieJar接口,在OkHttpClient構建的時候。
OkHttp3 默認不保持 Cookie 的解決方案
OkHttp3 聲明的 OkHttpClient 默認不保存 Cookie,不發送 Cookie。在實際開發中會丟失 Session ID 造成服務器無法判斷當前用戶的登錄狀態。查閱多方資料后給出解決辦法。
三點概念:
首次與服務器建立連接時,服務器生成 SessionID 標記當前連接會話。(HTTP 是無連接協議)
客戶端 request 時,將 帶有 SessionID 的 Cookie 發送至服務器,以此作為會話標記。
在實際使用 OkHttp3 時,通常一個 Application 只使用 一個 OkHttpClient 實例進行連接。
解決方案:
構建 CookieJar 對象,并重寫 saveFromResponse 和 loadFromRequest 方法。
使用構建了 CookieJar 的 OkHttpClient 實例收發 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();
感謝你能夠認真閱讀完這篇文章,希望小編分享的“OkHttp3中默認不保持Cookie怎么辦”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。