OkHttp3中默认不保持Cookie的解决方法
作者:云之外 时间:2021-10-25 15:20:50
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();
来源:https://www.jianshu.com/p/ddc0af82ed07
标签:okhttp3,cookie,不保持
0
投稿
猜你喜欢
java中文转全拼工具类分享
2022-02-07 09:50:57
android 获取视频第一帧作为缩略图的方法
2022-11-22 19:30:25
c# 二分查找算法
2023-10-24 04:42:45
android中AutoCompleteTextView的简单用法(实现搜索历史)
2023-01-08 18:33:01
半小时实现Java手撸网络爬虫框架(附完整源码)
2022-11-23 15:59:35
Java SSH 秘钥连接mysql数据库的方法
2022-07-11 21:23:18
Android AS创建自定义布局案例详解
2022-04-28 22:20:41
SpringCloud整合Nacos实现流程详解
2021-07-04 11:11:09
C#中委托和事件的区别实例解析
2022-07-03 09:28:39
C#(asp.net)多线程用法示例(可用于同时处理多个任务)
2022-03-09 01:41:30
Kotlin协程低级api startCoroutine与ContinuationInterceptor
2022-05-04 21:45:50
Flutter SizedBox布局组件Widget使用示例详解
2022-02-08 18:19:44
java 如何实现正确的删除集合中的元素
2022-08-03 17:44:31
Java KeyGenerator.generateKey的19个方法代码示例
2022-08-08 14:26:40
C# 常用协议实现模版及FixedSizeReceiveFilter示例(SuperSocket入门)
2023-12-12 04:17:48
springboot static关键字真能提高Bean的优先级(厉害了)
2023-03-10 07:39:12
Android使用ViewPager实现启动引导页
2023-02-03 12:28:28
入门JDK集合之HashMap解析
2023-11-24 02:45:03
Android实现可复用的筛选页面
2023-02-23 09:41:27
C#对list列表进行随机排序的方法
2021-10-31 20:00:17